{"id":21051732,"url":"https://github.com/novafacing/getters2","last_synced_at":"2025-05-15T21:36:10.108Z","repository":{"id":211082954,"uuid":"728172524","full_name":"novafacing/getters2","owner":"novafacing","description":"The best getters derive macro in town. Supports Enums too!","archived":false,"fork":false,"pushed_at":"2024-04-10T23:54:44.000Z","size":21,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-31T12:14:58.924Z","etag":null,"topics":["derive","getters","macro","rust"],"latest_commit_sha":null,"homepage":"https://docs.rs/getters2/latest/getters2/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/novafacing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-2.0.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-12-06T11:36:11.000Z","updated_at":"2024-10-14T15:54:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"909b5748-04b2-4f57-a633-e4f24c336c2b","html_url":"https://github.com/novafacing/getters2","commit_stats":null,"previous_names":["novafacing/getters2"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novafacing%2Fgetters2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novafacing%2Fgetters2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novafacing%2Fgetters2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novafacing%2Fgetters2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/novafacing","download_url":"https://codeload.github.com/novafacing/getters2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225384353,"owners_count":17465879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["derive","getters","macro","rust"],"created_at":"2024-11-19T15:59:34.540Z","updated_at":"2024-11-19T15:59:36.442Z","avatar_url":"https://github.com/novafacing.png","language":"Rust","funding_links":[],"categories":["rust"],"sub_categories":[],"readme":"# Getters2\n\nGetters2 is the *real* best \"auto-getters\"/\"auto-setters\" crate for Rust.\n\n* Selectable immutable/mutable/clone/deref getters\n* Support for named, tuple, and newtype structs\n* Support for named, tuple, and newtype *enums*\n\n- [Getters2](#getters2)\n  - [Installation](#installation)\n  - [Examples](#examples)\n    - [Structs](#structs)\n    - [Enums](#enums)\n  - [Prior Art](#prior-art)\n\n## Installation\n\n```sh\ncargo add getters2\n```\n\nor, add it to `Cargo.toml`\n\n```toml\n[dependencies]\ngetters2 = \"0.1.0\"\n```\n\n\n## Examples\n\nGetters2 has a dead simple API.\n\n### Structs\n\n```rust\nuse getters2::Getters;\n#[derive(Getters)]\n#[getters(mutable, clone, deref)]\nstruct Vector3 {\n   x: f32,\n   y: f32,\n   z: f32,\n   #[getters(skip, skip_mutable, skip_clone, skip_deref)]\n   name: String,\n}\n\nlet mut v = Vector3 { x: 1.0, y: 2.0, z: 3.0, name: \"MyVec\".to_string() };\nassert_eq!(v.x_ref(), \u00261.0);\nassert_eq!(v.y_ref(), \u00262.0);\nassert_eq!(v.z_ref(), \u00263.0);\nassert_eq!(v.x_deref(), 1.0);\nassert_eq!(v.y_deref(), 2.0);\nassert_eq!(v.z_deref(), 3.0);\nassert_eq!(v.x_clone(), 1.0);\nassert_eq!(v.y_clone(), 2.0);\nassert_eq!(v.z_clone(), 3.0);\n*v.x_mut() = 4.0;\n*v.y_mut() = 5.0;\n*v.z_mut() = 6.0;\nassert_eq!(v.x_ref(), \u00264.0);\nassert_eq!(v.y_ref(), \u00265.0);\nassert_eq!(v.z_ref(), \u00266.0);\n```\n\n### Enums\n\n```rust\nuse getters2::Getters;\n#[derive(Getters)]\n#[getters(deref, clone, mutable)]\nenum Animal {\n   Dog { name: String, age: u8 },\n   Cat { name: String, age: u8 },\n}\nlet mut dog = Animal::Dog { name: \"Rover\".to_string(), age: 5 };\nlet mut cat = Animal::Cat { name: \"Mittens\".to_string(), age: 3 };\nassert_eq!(dog.dog_name_ref(), Some(\u0026\"Rover\".to_string()));\nassert_eq!(dog.dog_name_deref(), Some(\"Rover\".to_string()));\nassert_eq!(dog.dog_name_clone(), Some(\"Rover\".to_string()));\nassert_eq!(dog.dog_age_ref(), Some(\u00265));\nassert_eq!(dog.dog_age_deref(), Some(5));\nassert_eq!(dog.dog_age_clone(), Some(5));\n\nlet Some(dog_name) = dog.dog_name_mut() else {\n   panic!(\"Expected Some\");\n};\n*dog_name = \"Spot\".to_string();\n\nassert_eq!(dog.dog_name_ref(), Some(\u0026\"Spot\".to_string()));\n\nassert_eq!(cat.cat_name_ref(), Some(\u0026\"Mittens\".to_string()));\nassert_eq!(cat.cat_name_deref(), Some(\"Mittens\".to_string()));\nassert_eq!(cat.cat_name_clone(), Some(\"Mittens\".to_string()));\nassert_eq!(cat.cat_age_ref(), Some(\u00263));\nassert_eq!(cat.cat_age_deref(), Some(3));\nassert_eq!(cat.cat_age_clone(), Some(3));\n\nlet Some(cat_name) = cat.cat_name_mut() else {\n  panic!(\"Expected Some\");\n};\n*cat_name = \"Whiskers\".to_string();\n\nassert_eq!(cat.cat_name_ref(), Some(\u0026\"Whiskers\".to_string()));\n```\n\n\n## Prior Art\n\nThere are a lot of crates that claim to do this. Getters2 has something they all don't.\n\n* [accessors](https://crates.io/crates/accessors) - Unmaintained\n* [accessors-rs](https://crates.io/crates/accessors-rs) - Doesn't support Enums\n* [getters](https://crates.io/crates/getters) - Yanked\n* [derive-getters](https://crates.io/crates/derive-getters) - Doesn't support enums","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovafacing%2Fgetters2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnovafacing%2Fgetters2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovafacing%2Fgetters2/lists"}