{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":427836269,"defaultBranch":"master","name":"swift-bridge","ownerLogin":"chinedufn","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-11-14T04:24:28.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2099811?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1723728982.0","currentOid":""},"activityList":{"items":[{"before":"e4e7aa1b01ba479753c210cc441341177a1ef8b2","after":"761037ec9a36b9a6ac34b51d4124cae961994967","ref":"refs/heads/gh-pages","pushedAt":"2024-08-26T15:17:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: 0698b41d0434c6036f4d13a921677dcdfdde34dc","shortMessageHtmlLink":"deploy: 0698b41"}},{"before":"9cfb0aa8c930fc79fa14d260f3567e6898db689b","after":"0698b41d0434c6036f4d13a921677dcdfdde34dc","ref":"refs/heads/master","pushedAt":"2024-08-26T15:17:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Add package name to example Cargo.toml (#290)\n\nThis commit adds a `[package] name = \"...\"` entry to the example `Cargo.toml` file in the `Swift Packages` chapter of the book.\r\n\r\nThis prevents the example crate from being interpreted as a virtual manifest.\r\nThis is important because a Cargo virtual manifest cannot have a `[lib]` section.","shortMessageHtmlLink":"Add package name to example Cargo.toml (#290)"}},{"before":"1b547a5f0ca976d711e6671b8d70d06113e916c4","after":"9cfb0aa8c930fc79fa14d260f3567e6898db689b","ref":"refs/heads/master","pushedAt":"2024-08-15T13:38:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"0.1.57","shortMessageHtmlLink":"0.1.57"}},{"before":"146bff4dc32daf640ca13c8d3780a6c01c245bca","after":"e4e7aa1b01ba479753c210cc441341177a1ef8b2","ref":"refs/heads/gh-pages","pushedAt":"2024-08-15T10:19:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: 1b547a5f0ca976d711e6671b8d70d06113e916c4","shortMessageHtmlLink":"deploy: 1b547a5"}},{"before":"495611ba39bc6b08838408751b92f6329b98f321","after":"1b547a5f0ca976d711e6671b8d70d06113e916c4","ref":"refs/heads/master","pushedAt":"2024-08-15T10:19:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Support throwing initializers (#287)\n\nThis PR implements throwing initializers. See: https://docs.swift.org/swift-book/documentation/the-swift-programming-language/errorhandling/.\r\n\r\nHere's an example of using this feature:\r\n\r\n```rust\r\n// Rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n enum ResultTransparentEnum {\r\n NamedField { data: i32 },\r\n UnnamedFields(u8, String),\r\n NoFields,\r\n }\r\n extern \"Rust\" {\r\n type ThrowingInitializer;\r\n #[swift_bridge(init)]\r\n fn new(succeed: bool) -> Result;\r\n fn val(&self) -> i32;\r\n }\r\n}\r\n```\r\n\r\n```swift\r\n// Swift\r\ndo {\r\n let throwingInitializer = try ThrowingInitializer(false)\r\n} catch let error as ResultTransparentEnum {\r\n //...\r\n} catch {\r\n //...\r\n}\r\n```","shortMessageHtmlLink":"Support throwing initializers (#287)"}},{"before":"d2c09e2e602a3dd9a2d0ff6c9298f77b2a4b5eeb","after":"495611ba39bc6b08838408751b92f6329b98f321","ref":"refs/heads/master","pushedAt":"2024-08-08T22:57:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NiwakaDev","name":"Niwaka","path":"/NiwakaDev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/61189782?s=80&v=4"},"commit":{"message":"Support failable initializers (#276)\n\nRelated to #235.\r\n\r\nThis PR supports failable initializers.\r\n\r\nSomething like:\r\n\r\n```rust\r\n// Rust side\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n extern \"Rust\" {\r\n #[swift_bridge(Equatable)]\r\n type FailableInitType;\r\n\r\n #[swift_bridge(init)]\r\n fn new() -> Option;\r\n }\r\n}\r\n```\r\n\r\n```swift\r\n// Swift side\r\nlet failableInitType = FailableInitType()\r\nif failableInitType == nil {\r\n ~\r\n} else {\r\n ~\r\n}\r\n```\r\n\r\nSee: [Swift Documentation - Failable Initializers](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/initialization/#Failable-Initializers)","shortMessageHtmlLink":"Support failable initializers (#276)"}},{"before":"d3d2da4e01bcf321fe32d6b07c5dfff94ee48fa8","after":"d2c09e2e602a3dd9a2d0ff6c9298f77b2a4b5eeb","ref":"refs/heads/master","pushedAt":"2024-08-08T09:34:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"0.1.56","shortMessageHtmlLink":"0.1.56"}},{"before":"1435235236a9c84c785d4460feb42086c8cf7762","after":null,"ref":"refs/heads/fix-ci","pushedAt":"2024-08-01T20:43:55.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"}},{"before":"37ac2c2627362d65edb7cce06705d27ad6acf066","after":"d3d2da4e01bcf321fe32d6b07c5dfff94ee48fa8","ref":"refs/heads/master","pushedAt":"2024-08-01T20:43:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Upgrade macOS CI runners (#285)\n\nThis commit upgrades the macOS CI runners from v11 to v14.\r\n\r\nGitHub has discontinued v11, so our CI was failing before this commit.","shortMessageHtmlLink":"Upgrade macOS CI runners (#285)"}},{"before":"7f95509b048e6f14e6f68aee43503a881847884f","after":"1435235236a9c84c785d4460feb42086c8cf7762","ref":"refs/heads/fix-ci","pushedAt":"2024-08-01T20:37:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Upgrade macOS CI runners\n\nThis commit upgrades the macOS CI runners from v11 to v14.\n\nGitHub has discontinued v11, so our CI was failing before this commit.","shortMessageHtmlLink":"Upgrade macOS CI runners"}},{"before":"024a400a962ec1349b3bd82f8725d9cd23787532","after":"7f95509b048e6f14e6f68aee43503a881847884f","ref":"refs/heads/fix-ci","pushedAt":"2024-08-01T20:35:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Upgrade macOS CI runners\n\nThis commit upgrades the macOS CI runners from v11 to v14.\n\nGitHub has discontinued v11, so our CI was failing before this commit.","shortMessageHtmlLink":"Upgrade macOS CI runners"}},{"before":null,"after":"024a400a962ec1349b3bd82f8725d9cd23787532","ref":"refs/heads/fix-ci","pushedAt":"2024-08-01T20:18:32.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Upgrade macOS CI runners\n\nThis commit upgrades the macOS CI runners from v11 to v14.\n\nGitHub has discontinued v11, so our CI was failing before this commit.","shortMessageHtmlLink":"Upgrade macOS CI runners"}},{"before":"34ce1ffb6bc5a54730bf60cf177042e1f4e479ff","after":"37ac2c2627362d65edb7cce06705d27ad6acf066","ref":"refs/heads/master","pushedAt":"2024-07-30T22:12:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Apply input module visibility to output module (#284)\n\nThis commit makes `#[swift_bridge::bridge]` respect the bridge module's visibility.\r\n\r\nHere's an example of using this.\r\n\r\n```rust\r\n// enums.rs\r\n\r\n// NOTE that we can now use `pub mod`, `pub(crate) mod`, etc\r\n#[swift_bridge::bridge]\r\npub mod ffi {\r\n enum MyEnum {\r\n VariantA,\r\n VariantB,\r\n VariantC,\r\n }\r\n}\r\n\r\n// lib.rs\r\nmod enums;\r\nuse enums::ffi::MyEnum;\r\n\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n #[swift_bridge(already_declared)]\r\n enum MyEnum {}\r\n\r\n extern \"Rust\" {\r\n fn getEnum() -> MyEnum;\r\n }\r\n}\r\n```\r\n\r\nCloses #252.","shortMessageHtmlLink":"Apply input module visibility to output module (#284)"}},{"before":"717fcef70d3c293c2fd8b962ad678da18b10a3c3","after":"34ce1ffb6bc5a54730bf60cf177042e1f4e479ff","ref":"refs/heads/master","pushedAt":"2024-06-21T08:59:10.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Suppress dead_code warning when returning `-> Result<*, TransparentType>` (#278)\n\nIn Rust 1.79.0, dead code warnings are emitted from enums where the compiler does not infer that wrapped data is used, even when the enum has been annotated with `#[repr(C]`. This warning triggers in `swift-bridge` when defining transparent structs or enums that will be returned in error results.\r\n\r\nThis appears to be a regression in the `dead_code` rustc lint. Pending upstream fixes to rustc, this change to `swift-bridge` annotates generated result enums with `#[allow(unused)]`.\r\n\r\nFixes #270\r\n\r\n```\r\nerror: field `0` is never read\r\n |\r\n1 | #[swift_bridge::bridge]\r\n | ----------------------- field in this variant\r\n...\r\n3 | enum ResultTransparentEnum {\r\n | ^^^^^^^^^^^^^^^^^^^^^\r\n |\r\nhelp: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field\r\n |\r\n3 | enum () {\r\n | ~~\r\n```\r\n\r\n## Example bridge\r\n\r\nThe following bridge code is the minimal reproduction case:\r\n\r\n``` rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n #[swift_bridge(swift_repr = \"struct\")]\r\n struct TransparentErrorStruct(pub String);\r\n\r\n extern \"Rust\" {\r\n fn rust_func_returns_result_transparent_struct(\r\n succeed: bool\r\n ) -> Result<(), TransparentErrorStruct>;\r\n }\r\n}\r\n\r\nfn rust_func_returns_result_transparent_struct(\r\n succeed: bool\r\n) -> Result<(), ffi::ResultTestTransparentStruct> {\r\n if succeed {\r\n Ok(())\r\n } else {\r\n Err(ffi::ResultTestTransparentStruct(\"failed\".to_string()))\r\n }\r\n}\r\n\r\nimpl std::error::Error for ffi:: TransparentErrorStruct {}\r\n\r\nimpl std::fmt::Debug for ffi:: TransparentErrorStruct {\r\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\r\n write!(f, \"{}\", self)\r\n }\r\n}\r\n\r\nimpl std::fmt::Display for ffi:: TransparentErrorStruct {\r\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\r\n write!(f, \"{}\", self.0)\r\n }\r\n}\r\n```","shortMessageHtmlLink":"Suppress dead_code warning when returning `-> Result<*, TransparentTy…"}},{"before":"0b9ab817579d53a3626d3c2fb2e0a8eb5bc96517","after":"146bff4dc32daf640ca13c8d3780a6c01c245bca","ref":"refs/heads/gh-pages","pushedAt":"2024-06-16T01:33:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: 717fcef70d3c293c2fd8b962ad678da18b10a3c3","shortMessageHtmlLink":"deploy: 717fcef"}},{"before":"ef01d21001914b79e0384627535098e15f87f096","after":"717fcef70d3c293c2fd8b962ad678da18b10a3c3","ref":"refs/heads/master","pushedAt":"2024-06-16T01:33:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Add parse-bridges CLI subcommand (#274)\n\n## What's this?\r\n\r\nA new `parse-bridges` subcommand.\r\nAlso, an update to the documentation in the example showing this feature's preview.\r\n\r\nThis is handy for usage in higher-level build systems.\r\nFor example, in my case, I build both Rust and Swift with CMake, and having this CLI command implemented would allow generating the glue code from CMake as well, as a dependency step before building Rust/Swift targets (via `add_custom_target` API).\r\n\r\n## Notes\r\n\r\nOne caveat of the current implementation is that one would have to duplicate the crate name in the invocation line (the first argument).\r\n\r\nThis is fine for cases like mine, where this would be taken from the build system anyway, but it may not be handy for other cases.\r\n\r\nThe package name can be automatically deduced if one's running in the correct directory (the package root).\r\nIn this case, we can parse the `cargo read-manifest` output and get the name from there.\r\n\r\nThis would require a new dependency, though (`serde_json`), so I decided not to do this just yet, but if this sounds okay to you, I'll go ahead and implement this as well.\r\n\r\n## Examples\r\n\r\nSingle file:\r\n```shell\r\nswift-bridge-cli parse-bridges --crate-name my-awesome-crate -f src/lib.rs -o generated\r\n```\r\n\r\nMultiple files:\r\n```shell\r\nswift-bridge-cli parse-bridges --crate-name my-superb-crate \\\r\n-f src/lib.rs \\\r\n-f src/some_other_file.rs \\\r\n-o generated\r\n```","shortMessageHtmlLink":"Add parse-bridges CLI subcommand (#274)"}},{"before":"87dbea3c28d4a96d9195bd3a70fdecfd85fd8f5c","after":"ef01d21001914b79e0384627535098e15f87f096","ref":"refs/heads/master","pushedAt":"2024-04-29T03:20:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"0.1.55","shortMessageHtmlLink":"0.1.55"}},{"before":"292e25a23a5d841c9715a392110e9e1620fe5951","after":null,"ref":"refs/heads/fix-mem-leak","pushedAt":"2024-04-29T03:14:55.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"}},{"before":"b4ba1a72a682c3917d78d6650ffb249c7109999b","after":"87dbea3c28d4a96d9195bd3a70fdecfd85fd8f5c","ref":"refs/heads/master","pushedAt":"2024-04-29T03:14:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Fix memory leak for `Option` (#273)\n\nThis commit fixes a memory leak when passing `Option` to\r\n`extern \"Rust\"` functions.\r\n\r\nFor example, the following bridge module would lead to memory leaks:\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n extern \"Swift\" {\r\n type SomeSwiftType;\r\n }\r\n\r\n extern \"Rust\" {\r\n fn rust_fn_takes_swift_type(arg: Option);\r\n }\r\n}\r\n```\r\n\r\nWhen the above `rust_fn_takes_swift_type` function was called the\r\n`SomeSwiftType` would be retained twice.\r\n\r\nWhen the Rust side later freed `SomeSwiftType` the retain count would\r\ndrop from 2 to 1.\r\n\r\nSince there was still 1 retain, `SomeSwiftType` would never get freed.\r\n\r\n## Impact\r\n\r\nSupport for passing `Option` from Swift to Rust was\r\nintroduced earlier today.\r\n\r\nThis functionality was released in `swift-bridge = \"0.1.54\"`.\r\n\r\nW will be deploying `swift-bridge = \"0.1.55\" today. \"0.1.55\" will\r\ncontain a fix for the leak.\r\n\r\nBecause support for `Option` was released today, and the\r\nfix will be released today, it should be unlikely that anyone has\r\nexperienced this leak.\r\n\r\nWe will yank \"0.1.54\" from \"crates.io\".\r\n\r\nAll users (probably zero) that are bridging `Option` should\r\nupgrade from \"0.1.54\" to \"0.1.55\" to.\r\n\r\n## Solution\r\n\r\nThis commit does the following:\r\n\r\n- When passing ownership of a Swift type from Swift to Rust we now\r\n increment the retain count by one. Before this commit we were\r\n incrementing it by two.\r\n\r\n- When passing ownership of a Swift type from Rust to Swift we avoid\r\n calling the the Rust handle's `Drop` implementation. We avoid this by\r\n using `std::mem::forget`.\r\n This ensures that the retain count does not get decremented.\r\n\r\n- When passing ownership of a Swift type from Rust to Swift the Swift\r\n side does not increment the retain count.\r\n\r\nWith all of the above we should now be able to:\r\n\r\n- Create an `Option` Swift type on the Swift side\r\n\r\n- Pass ownership of the `Option to Rust. The retain count is now 1.\r\n\r\n- Pass ownership back to Swift. The retain count is still 1.\r\n\r\nBefore this commit, when passing an `Option` it was:\r\n\r\n- Create a Swift type on the Swift side\r\n\r\n- Pass `Option` to Rust. Retain count is now 2\r\n\r\n- Rust passes ownership back to Swift. Retain count is now 1\r\n\r\n- Retain count never hits 0. Memory has been leaked.","shortMessageHtmlLink":"Fix memory leak for Option<SwiftType> (#273)"}},{"before":null,"after":"292e25a23a5d841c9715a392110e9e1620fe5951","ref":"refs/heads/fix-mem-leak","pushedAt":"2024-04-29T03:07:44.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Fix memory leak for `Option`\n\nThis commit fixes a memory leak when passing `Option` to\n`extern \"Rust\"` functions.\n\nFor example, the following bridge module would lead to memory leaks:\n\n```rust\n#[swift_bridge::bridge]\nmod ffi {\n extern \"Swift\" {\n type SomeSwiftType;\n }\n\n extern \"Rust\" {\n fn rust_fn_takes_swift_type(arg: Option);\n }\n}\n```\n\nWhen the above `rust_fn_takes_swift_type` function was called the\n`SomeSwiftType` would be retained twice.\n\nWhen the Rust side later freed `SomeSwiftType` the retain count would\ndrop from 2 to 1.\n\nSince there was still 1 retain, `SomeSwiftType` would never get freed.\n\n## Impact\n\nSupport for passing `Option` from Swift to Rust was\nintroduced earlier today.\n\nThis functionality was released in `swift-bridge = \"0.1.54\"`.\n\nW will be deploying `swift-bridge = \"0.1.55\" today. \"0.1.55\" will\ncontain a fix for the leak.\n\nBecause support for `Option` was released today, and the\nfix will be released today, it should be unlikely that anyone has\nexperienced this leak.\n\nWe will yank \"0.1.54\" from \"crates.io\".\n\nAll users (probably zero) that are bridging `Option` should\nupgrade from \"0.1.54\" to \"0.1.55\" to.\n\n## Solution\n\nThis commit does the following:\n\n- When passing ownership of a Swift type from Swift to Rust we now\n increment the retain count by one. Before this commit we were\n incrementing it by two.\n\n- When passing ownership of a Swift type from Rust to Swift we avoid\n calling the the Rust handle's `Drop` implementation. We avoid this by\n using `std::mem::forget`.\n This ensures that the retain count does not get decremented.\n\n- When passing ownership of a Swift type from Rust to Swift the Swift\n side does not increment the retain count.\n\nWith all of the above we should now be able to:\n\n- Create an `Option` Swift type on the Swift side\n\n- Pass ownership of the `Option to Rust. The retain count is now 1.\n\n- Pass ownership back to Swift. The retain count is still 1.\n\nBefore this commit, when passing an `Option` it was:\n\n- Create a Swift type on the Swift side\n\n- Pass `Option` to Rust. Retain count is now 2\n\n- Rust passes ownership back to Swift. Retain count is now 1\n\n- Retain count never hits 0. Memory has been leaked.","shortMessageHtmlLink":"Fix memory leak for Option<SwiftType>"}},{"before":"9d02d8f4e8e0b1482e79cdceea9343456a6d4d57","after":"b4ba1a72a682c3917d78d6650ffb249c7109999b","ref":"refs/heads/master","pushedAt":"2024-04-29T02:11:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Use explicit pointer casting\n\nThis commit replaces calls to `pointer::cast` with explicit casting via\n`as *mut SomeType`.\n\nThis reduces the likelihood of our codegen generating unsound code that\ncasts a pointer to the wrong type.","shortMessageHtmlLink":"Use explicit pointer casting"}},{"before":"636fa2774870c052a18f06d98ca5f6966c09bdd6","after":"9d02d8f4e8e0b1482e79cdceea9343456a6d4d57","ref":"refs/heads/master","pushedAt":"2024-04-28T17:50:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"0.1.54","shortMessageHtmlLink":"0.1.54"}},{"before":"c3c950c90867550e09a24c94357f1e502bf6d69d","after":"636fa2774870c052a18f06d98ca5f6966c09bdd6","ref":"refs/heads/master","pushedAt":"2024-04-28T14:54:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Support Option (#272)\n\nThis adds support for bridging `Option` in `extern \"Rust\"` functions. This fixes #268, and makes the following now possible:\r\n\r\n```rs\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n extern \"Swift\" {\r\n type SomeSwiftType;\r\n }\r\n\r\n extern \"Rust\" {\r\n fn option_arg(arg: Option);\r\n fn returns_option() -> Option;\r\n }\r\n}\r\n```","shortMessageHtmlLink":"Support Option<OpaqueSwiftType> (#272)"}},{"before":"e016f594d30b569903d3098a036510511bbf531b","after":"0b9ab817579d53a3626d3c2fb2e0a8eb5bc96517","ref":"refs/heads/gh-pages","pushedAt":"2024-04-23T07:16:34.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: c3c950c90867550e09a24c94357f1e502bf6d69d","shortMessageHtmlLink":"deploy: c3c950c"}},{"before":"75a1077f1661ad048398a850226472c3310abc47","after":"c3c950c90867550e09a24c94357f1e502bf6d69d","ref":"refs/heads/master","pushedAt":"2024-04-23T07:16:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Inline example code in book\n\nThis commit inlines some of the example code in the book.\n\nThis makes it easier to read book chapters using any text viewer, as\nopposed to needing to use `mdbook`.","shortMessageHtmlLink":"Inline example code in book"}},{"before":"401cea6999981e5fa8cd461769437f6b3d0e8c66","after":"e016f594d30b569903d3098a036510511bbf531b","ref":"refs/heads/gh-pages","pushedAt":"2024-04-09T11:47:56.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: 75a1077f1661ad048398a850226472c3310abc47","shortMessageHtmlLink":"deploy: 75a1077"}},{"before":"17c9ef17e0482b676326743823a27b99d1fe4839","after":null,"ref":"refs/heads/docs","pushedAt":"2024-04-09T11:47:47.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"}},{"before":"7fc3d3ccca618f3f231fc6f8a7678ad119ca99b0","after":"75a1077f1661ad048398a850226472c3310abc47","ref":"refs/heads/master","pushedAt":"2024-04-09T11:47:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Improve signature support docs (#267)","shortMessageHtmlLink":"Improve signature support docs (#267)"}},{"before":null,"after":"17c9ef17e0482b676326743823a27b99d1fe4839","ref":"refs/heads/docs","pushedAt":"2024-04-09T11:47:37.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"},"commit":{"message":"Improve signature support docs","shortMessageHtmlLink":"Improve signature support docs"}},{"before":"f406fd1134a68ce5fbd32eaabe528e99bc527cfa","after":null,"ref":"refs/heads/document-to-rust-str","pushedAt":"2024-04-09T11:27:23.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chinedufn","name":"Chinedu Francis Nwafili","path":"/chinedufn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2099811?s=80&v=4"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0yNlQxNToxNzo1Ny4wMDAwMDBazwAAAASkZ9T5","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNC0wOVQxMToyNzoyMy4wMDAwMDBazwAAAAQr6Zpl"}},"title":"Activity · chinedufn/swift-bridge"}