{"id":28180077,"url":"https://github.com/skdziwak/rs-rdc","last_synced_at":"2025-05-16T02:14:53.065Z","repository":{"id":65562872,"uuid":"594806834","full_name":"skdziwak/rs-rdc","owner":"skdziwak","description":"This crate is used to generate code for other languages from Rust's data structures. It can be used to generate DTO classes to make it easier to interact with other languages.","archived":false,"fork":false,"pushed_at":"2023-02-07T19:59:16.000Z","size":20,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-14T14:35:26.404Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skdziwak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2023-01-29T17:45:04.000Z","updated_at":"2024-10-01T21:27:05.000Z","dependencies_parsed_at":"2023-02-16T00:31:12.296Z","dependency_job_id":null,"html_url":"https://github.com/skdziwak/rs-rdc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skdziwak%2Frs-rdc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skdziwak%2Frs-rdc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skdziwak%2Frs-rdc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skdziwak%2Frs-rdc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skdziwak","download_url":"https://codeload.github.com/skdziwak/rs-rdc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254453526,"owners_count":22073618,"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":[],"created_at":"2025-05-16T02:14:51.904Z","updated_at":"2025-05-16T02:14:53.050Z","avatar_url":"https://github.com/skdziwak.png","language":"Rust","funding_links":[],"categories":["\u003ca name=\"Rust\"\u003e\u003c/a\u003eRust"],"sub_categories":[],"readme":"# rdc\n\n## RDC\nRDC - Rust Data Codegen\n\nThis crate is used to generate code for other languages from Rust's data structures.\nIt can be used to generate DTO classes to make it easier to interact with other languages.\n\nIt currently supports only Java, but it can be easily extended to support other languages in the future.\n\nIt relies on the `serde` crate to serialize and deserialize data.\n\nFor testing purposes it uses gradle to compile and run the generated Java code.\n\n### Java Examples\n\n#### Simple struct\n\n```rust\nuse rdc::{rdc_java, RDC};\nuse rdc::targets::java::JavaClass;\nuse serde::{Serialize, Deserialize};\n\n#[derive(RDC, Serialize, Deserialize)]\nstruct MyStruct {\n    field1: String,\n    field2: i32,\n}\n\n#[derive(RDC)]\nstruct MyStruct2 {\n    field1: Vec\u003cString\u003e,\n}\n\nlet classes: Vec\u003cJavaClass\u003e = rdc_java!(MyStruct, MyStruct2).unwrap();\n```\n\n#### Struct with dependencies\nYou do not have to specify all the types that are used in your data structures.\nRDC will automatically add all the dependencies.\n\n```rust\nuse rdc::{rdc_java, RDC};\nuse rdc::targets::java::JavaClass;\n\n#[derive(RDC)]\nstruct Dependency {\n   field1: String,\n}\n\n#[derive(RDC)]\nstruct MyStruct {\n    field1: String,\n    dependency: Dependency,\n}\n\nlet classes: Vec\u003cJavaClass\u003e = rdc_java!(MyStruct).unwrap();\nassert_eq!(classes.len(), 2);\n```\n\n#### Enum\n\n```rust\nuse rdc::{rdc_java, RDC};\n\n#[derive(RDC)]\nenum MyEnum {\n    Variant1,\n    Variant2\n}\nrdc_java!(MyEnum).unwrap();\n```\n\n#### Data enum\nData enum is a special type of enum that can contain data.\n```rust\nuse rdc::{rdc_java, RDC};\n\n#[derive(RDC)]\nenum MyEnum {\n    Variant1(i32),\n    Variant2,\n    Variant3 { field1: String }\n}\n\nrdc_java!(MyEnum).unwrap();\n```\nExample JSON representations:\n```json\n[\n  {\n    \"Variant1\": 1\n  },\n  \"Variant2\",\n  {\n    \"Variant3\": {\n       \"field1\": \"value\"\n    }\n  }\n]\n```\n\n#### Generics\nThere is support for generics in RDC.\nIt works by generating a Java class for each combination of generic types.\nEvery used generic type should implement `rdc::RDCType` trait.\nPlease note that this trait is implemented automatically by `#[derive(RDC)]`.\n```rust\nuse rdc::{rdc_java, RDC, RDCType};\n\n#[derive(RDC)]\nstruct MyStruct\u003cT\u003e where T: RDCType {\n    value: T,\n}\n\nlet classes = rdc_java!(MyStruct\u003ci32\u003e, MyStruct\u003cString\u003e).unwrap();\nassert_eq!(classes.len(), 2);\n```\n\n#### Writing\nRDC can write the generated code to files.\n```rust\nuse rdc::{rdc_java, RDC};\nuse rdc::targets::java::{JavaClass, write_java};\n\n#[derive(RDC)]\nenum MyEnum {\n    Variant1,\n    Variant2\n}\nlet classes: Vec\u003cJavaClass\u003e = rdc_java!(MyEnum).unwrap();\n\nwrite_java(\u0026classes, \"com.example\", \"target/test-tmp/src/main/java\").unwrap();\n```\n\n#### Serde compatibility\nYou can use `#[serde(rename = \"new_name\")]` to rename fields and it will be reflected in the generated code.\n\nLicense: MIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskdziwak%2Frs-rdc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskdziwak%2Frs-rdc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskdziwak%2Frs-rdc/lists"}