{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":462524294,"defaultBranch":"master","name":"axum-sqlx-tx","ownerLogin":"digital-society-coop","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-02-23T00:32:00.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/110547173?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1715765832.0","currentOid":""},"activityList":{"items":[{"before":"21ef873a9527f6ddbc665478f104d9ef82d62a57","after":"28db0cac93dcb35ed8dd063cdbaa8f15cd4bb645","ref":"refs/heads/master","pushedAt":"2024-05-15T09:42:46.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #42 from arcstur/impl-from-ref-into-pool\n\nfeat: implement FromRef for State into sqlx pool","shortMessageHtmlLink":"Merge pull request #42 from arcstur/impl-from-ref-into-pool"}},{"before":"f326ace77b2412f6c717ca6eb8c5410023eef24b","after":null,"ref":"refs/heads/clippy","pushedAt":"2024-05-15T09:37:12.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"}},{"before":"ca4c50f64ee9e0447ab62ba25f30b3d969790a76","after":"21ef873a9527f6ddbc665478f104d9ef82d62a57","ref":"refs/heads/master","pushedAt":"2024-05-15T09:37:11.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #43 from digital-society-coop/clippy\n\nFix new clippy lints","shortMessageHtmlLink":"Merge pull request #43 from digital-society-coop/clippy"}},{"before":null,"after":"f326ace77b2412f6c717ca6eb8c5410023eef24b","ref":"refs/heads/clippy","pushedAt":"2024-05-15T09:35:37.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"chore: fix new clippy lints","shortMessageHtmlLink":"chore: fix new clippy lints"}},{"before":"cb1854efaf70b8a3943aa1e62153f954a6f4f3c0","after":null,"ref":"refs/heads/remove-http-body-util","pushedAt":"2023-12-23T21:17:26.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"}},{"before":"b01b01b5ed8684ddcdb265a43f10be20a2f57693","after":"ca4c50f64ee9e0447ab62ba25f30b3d969790a76","ref":"refs/heads/master","pushedAt":"2023-12-23T21:17:25.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #36 from digital-society-coop/remove-http-body-util\n\nUse `axum::body::to_bytes` instead of `http-body-util`","shortMessageHtmlLink":"Merge pull request #36 from digital-society-coop/remove-http-body-util"}},{"before":null,"after":"cb1854efaf70b8a3943aa1e62153f954a6f4f3c0","ref":"refs/heads/remove-http-body-util","pushedAt":"2023-12-23T21:15:33.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"refactor: use `axum::body::to_bytes` instead of `http-body-util`","shortMessageHtmlLink":"refactor: use axum::body::to_bytes instead of http-body-util"}},{"before":"d9cf9a625a853a8994adce0d46a1c9c96885419a","after":null,"ref":"refs/heads/bump","pushedAt":"2023-12-23T21:06:41.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"}},{"before":"9a2f7613da2c6f731b7c37ce95f3113f386dcb7c","after":"b01b01b5ed8684ddcdb265a43f10be20a2f57693","ref":"refs/heads/master","pushedAt":"2023-12-23T21:06:40.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #35 from digital-society-coop/bump\n\nBump version for 0.8.0","shortMessageHtmlLink":"Merge pull request #35 from digital-society-coop/bump"}},{"before":null,"after":"d9cf9a625a853a8994adce0d46a1c9c96885419a","ref":"refs/heads/bump","pushedAt":"2023-12-23T21:04:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"chore: bump version","shortMessageHtmlLink":"chore: bump version"}},{"before":"1cec0aebc9991285b88cfdbf5ce7cd37c4304840","after":null,"ref":"refs/heads/axum-0.7","pushedAt":"2023-12-23T21:01:27.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"}},{"before":"2b5a3c006ceb51dff1419e3a5688b7fb6d002a79","after":"9a2f7613da2c6f731b7c37ce95f3113f386dcb7c","ref":"refs/heads/master","pushedAt":"2023-12-23T21:01:26.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #34 from digital-society-coop/axum-0.7\n\nUpgrade axum to 0.7","shortMessageHtmlLink":"Merge pull request #34 from digital-society-coop/axum-0.7"}},{"before":"3c4871076b9b516b1f7101794f79a63f3cdb9847","after":"1cec0aebc9991285b88cfdbf5ce7cd37c4304840","ref":"refs/heads/axum-0.7","pushedAt":"2023-12-23T20:38:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"refactor: ditch `slot`\n\nIt turns out the `parking_lot` `arc_lock` future does the main thing we\nwant from `Slot`, giving us `'static` lock guards that unlock the value\non drop. The only missing functionality is the \"stealing\" we need to\nobtain ownership in order to commit the transaction. Rather than\nimplementing this via `Option`, we add an additional state to\n`LazyTransaction` and handle it there.\n\nUltimately this removes a lot of code, and makes the synchronisation\nmechanism even less exotic.","shortMessageHtmlLink":"refactor: ditch slot"}},{"before":"9e9827fc6a526ab18d3d141e06dbb9e72b2a65df","after":"3c4871076b9b516b1f7101794f79a63f3cdb9847","ref":"refs/heads/axum-0.7","pushedAt":"2023-12-23T17:25:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"fix: simplify synchronisation to handle cloned request extensions\n\nThis follows on from the upgrade to axum 0.7 / hyper 1.0 which\nintroduced the requirement for request extensions to implement `Clone`.\n\nThe previous implementation exibited undesirable behaviour if some\nmiddleware (that ran after `axum_sqlx_tx::Layer`) held on to a clone of\nthe request extensions - specifically an `OverlappingExtractors` error\nwould then be thrown by any attempt to extract `Tx`. Note that in this\ncircumstance it's not actually possible for the \"inspecting\" middleware\nto obtain the transaction since it cannot name the type of the extension\n(`crate::extension::Extension`, previously `crate::tx::Lazy`) in order\nto interact with it.\n\nThe fix involved simplifying the `Slot` synchronisation primitive and\nthe usage of it in the extension. We previously had a \"chained\" `Slot`\nsetup (e.g. a `Slot` containing another `Slot`) in order to share the\nlazy transaction between the middleware future and the request extension\n- the `Slot` remained in the middleware future stack while the `Lease`\nwas passed to the request extension. This was problematic because\n`Lease` doesn't implement `Clone`, and it mustn't since the whole idea\nis to synchronise access to a `Transaction` which itself cannot be\ncloned. Now `Slot`s can be cloned, so the same `Slot` can be held in the\nmiddleware future's stack and in the request extension. Moreover, an\narbitrary number of copies of the `Slot` can be held without preventing\nanother `Slot` from leasing (so long as there's no other lease) - just\nlike `Mutex`.\n\nThis still achieves the outcome we want because the only public\ninterface to the `Slot` is via `Tx::from_request_parts`, thus a conflict\ncan only occur due to overlapping use of the extractor.","shortMessageHtmlLink":"fix: simplify synchronisation to handle cloned request extensions"}},{"before":null,"after":"9e9827fc6a526ab18d3d141e06dbb9e72b2a65df","ref":"refs/heads/axum-0.7","pushedAt":"2023-12-13T22:15:48.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"chore: upgrade axum to 0.7\n\nThe largest changes are caused by the associated upgrade of hyper to\n1.0, including the removal of `axum::Server` (replaced by `axum::serve`)\nand http body utilities (replaced by `http-body-util`). These changes\nwere purely mechanical.\n\nA more subtle change is the requirement from `http` 1.0 for request\nextensions to be `Clone`. The `Lazy` transaction wrapper is not `Clone`,\nso it has been wrapped in an `Arc`, with `Arc::get_mut` being used to\nobtain the necessary mutability. This feels like it might be buggy,\nsince other middleware could potentially clone and store request\nextensions, without otherwise interfering with the transaction (meaning\nthe `Tx` extractor should still work). This needs subsequent\ninvestigation before release.","shortMessageHtmlLink":"chore: upgrade axum to 0.7"}},{"before":"04b4a30eaaaeb7782061c4971184b905ff17b813","after":null,"ref":"refs/heads/bump-version","pushedAt":"2023-12-01T02:15:17.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"}},{"before":"0325d41e0c3146eec1d87c0d395c1bc068879e74","after":"2b5a3c006ceb51dff1419e3a5688b7fb6d002a79","ref":"refs/heads/master","pushedAt":"2023-12-01T02:15:16.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #32 from digital-society-coop/bump-version\n\nchore: bump version","shortMessageHtmlLink":"Merge pull request #32 from digital-society-coop/bump-version"}},{"before":null,"after":"04b4a30eaaaeb7782061c4971184b905ff17b813","ref":"refs/heads/bump-version","pushedAt":"2023-12-01T02:07:57.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"chore: bump version","shortMessageHtmlLink":"chore: bump version"}},{"before":"243fc0389465cc861e68cd6852bfa475e62ede8c","after":null,"ref":"refs/heads/multi-db","pushedAt":"2023-11-03T21:57:23.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"}},{"before":"5957c325be6e8821daa47304727117980b87ce83","after":"0325d41e0c3146eec1d87c0d395c1bc068879e74","ref":"refs/heads/master","pushedAt":"2023-11-03T21:57:22.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #19 from digital-society-coop/multi-db\n\nAdd support for multiple database instances","shortMessageHtmlLink":"Merge pull request #19 from digital-society-coop/multi-db"}},{"before":"698e72de45750d3226594531eb7eb2f539147a05","after":"243fc0389465cc861e68cd6852bfa475e62ede8c","ref":"refs/heads/multi-db","pushedAt":"2023-11-03T21:46:46.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"refactor: support multiple databases of the same type\n\nThis adds a `Marker` trait, which just specifies a database `Driver`\nimplementing `sqlx::Database`. APIs now use `Marker` as the bound for\n`DB` generic type parameters. There is a trivial blanket implementation\nfor all types implementing `sqlx::Database` which makes this backwards\ncompatible.","shortMessageHtmlLink":"refactor: support multiple databases of the same type"}},{"before":"f6f43db5f738d80946adfada057ffafa2508abfc","after":null,"ref":"refs/heads/tidy","pushedAt":"2023-11-02T20:45:16.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"}},{"before":"194065823777493e28e979fd8acaae32fe351620","after":"5957c325be6e8821daa47304727117980b87ce83","ref":"refs/heads/master","pushedAt":"2023-11-02T20:45:15.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #28 from digital-society-coop/tidy\n\nSmall tidy ups","shortMessageHtmlLink":"Merge pull request #28 from digital-society-coop/tidy"}},{"before":null,"after":"f6f43db5f738d80946adfada057ffafa2508abfc","ref":"refs/heads/tidy","pushedAt":"2023-11-02T20:41:47.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"refactor: convert `Tx` from a tuple struct\n\nNamed fields are generally a bit clearer for structs with multiple\nfields.","shortMessageHtmlLink":"refactor: convert Tx from a tuple struct"}},{"before":"e896b5aa93d0f18a5dc3b3a0fe34842869220124","after":null,"ref":"refs/heads/state","pushedAt":"2023-11-02T20:14:37.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"}},{"before":"fcba66cd7c6f7e7c121916664a3cd4990292f186","after":"194065823777493e28e979fd8acaae32fe351620","ref":"refs/heads/master","pushedAt":"2023-11-02T20:14:36.000Z","pushType":"pr_merge","commitsCount":7,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #27 from digital-society-coop/state\n\nSimplify API and use \"state\" to improve type-safety","shortMessageHtmlLink":"Merge pull request #27 from digital-society-coop/state"}},{"before":"cf7fd990a2960785238db9369b8d1820d2031e99","after":"e896b5aa93d0f18a5dc3b3a0fe34842869220124","ref":"refs/heads/state","pushedAt":"2023-11-02T17:30:57.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"chore: doc fix","shortMessageHtmlLink":"chore: doc fix"}},{"before":null,"after":"cf7fd990a2960785238db9369b8d1820d2031e99","ref":"refs/heads/state","pushedAt":"2023-11-02T17:18:11.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"chore: doc fix","shortMessageHtmlLink":"chore: doc fix"}},{"before":"5c6e8bdfdbe95ee96589dad772379dcefa42d764","after":null,"ref":"refs/heads/extract-in-middleware","pushedAt":"2023-11-01T13:11:32.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"}},{"before":"fbd53139a7ae9ac54a4839a1cf0e29030a859cc5","after":"fcba66cd7c6f7e7c121916664a3cd4990292f186","ref":"refs/heads/master","pushedAt":"2023-11-01T13:11:31.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"connec","name":"Chris Connelly","path":"/connec","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/160652?s=80&v=4"},"commit":{"message":"Merge pull request #26 from digital-society-coop/extract-in-middleware\n\nAdd test for reusing middleware `Tx` in handler","shortMessageHtmlLink":"Merge pull request #26 from digital-society-coop/extract-in-middleware"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAESl03BgA","startCursor":null,"endCursor":null}},"title":"Activity ยท digital-society-coop/axum-sqlx-tx"}