{"id":21625390,"url":"https://github.com/eigr/spawn-rust-sdk","last_synced_at":"2025-04-11T12:35:35.658Z","repository":{"id":139565522,"uuid":"510799712","full_name":"eigr/spawn-rust-sdk","owner":"eigr","description":null,"archived":false,"fork":false,"pushed_at":"2024-04-05T16:15:06.000Z","size":146,"stargazers_count":5,"open_issues_count":3,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-07T18:02:17.225Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eigr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-07-05T15:46:32.000Z","updated_at":"2024-02-01T17:46:58.000Z","dependencies_parsed_at":"2023-05-15T13:00:34.371Z","dependency_job_id":"15deed28-14d3-4edc-b166-f04ab9c50f11","html_url":"https://github.com/eigr/spawn-rust-sdk","commit_stats":null,"previous_names":["eigr/spawn-rust-sdk"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigr%2Fspawn-rust-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigr%2Fspawn-rust-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigr%2Fspawn-rust-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigr%2Fspawn-rust-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eigr","download_url":"https://codeload.github.com/eigr/spawn-rust-sdk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248402341,"owners_count":21097328,"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":"2024-11-25T01:09:04.156Z","updated_at":"2025-04-11T12:35:35.628Z","avatar_url":"https://github.com/eigr.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spawn Rust SDK\n\n```protobuf\nsyntax = \"proto3\";\n\npackage domain;\n\nmessage State {\n  repeated string languages = 1;\n}\n\nmessage Request {\n  string language = 1;\n}\n\nmessage Reply {\n  string response = 1;\n}\n```\n\n```rust\nuse spawn_examples::domain::domain::{Reply, Request, State};\nuse spawn_rs::{value::Value, Context, Message};\n\nuse log::info;\n\npub fn set_language(msg: Message, ctx: Context) -\u003e Value {\n    info!(\"Actor msg: {:?}\", msg);\n    return match msg.body::\u003cRequest\u003e() {\n        Ok(request) =\u003e {\n            let lang = request.language;\n            info!(\"Setlanguage To: {:?}\", lang);\n            let mut reply = Reply::default();\n            reply.response = lang;\n\n            match \u0026ctx.state::\u003cState\u003e() {\n                Some(state) =\u003e Value::new()\n                    .state::\u003cState\u003e(\u0026state.as_ref().unwrap(), \"domain.State\".to_string())\n                    .response(\u0026reply, \"domain.Reply\".to_string())\n                    .to_owned(),\n                _ =\u003e Value::new()\n                    .state::\u003cState\u003e(\u0026State::default(), \"domain.State\".to_string())\n                    .response(\u0026reply, \"domain.Reply\".to_string())\n                    .to_owned(),\n            }\n        }\n        Err(_e) =\u003e Value::new()\n            .state::\u003cState\u003e(\u0026State::default(), \"domain.State\".to_string())\n            .to_owned(),\n    };\n}\n\npub fn set_language_with_timer(msg: Message, ctx: Context) -\u003e Value {\n    info!(\"Actor msg: {:?}\", msg);\n    return match msg.body::\u003cRequest\u003e() {\n        Ok(request) =\u003e {\n            let lang = request.language;\n            info!(\"Setlanguage To: {:?}\", lang);\n            let mut reply = Reply::default();\n            reply.response = lang;\n\n            match \u0026ctx.state::\u003cState\u003e() {\n                Some(state) =\u003e Value::new()\n                    .state::\u003cState\u003e(\u0026state.as_ref().unwrap(), \"domain.State\".to_string())\n                    .response(\u0026reply, \"domain.Reply\".to_string())\n                    .to_owned(),\n                _ =\u003e Value::new()\n                    .state::\u003cState\u003e(\u0026State::default(), \"domain.State\".to_string())\n                    .response(\u0026reply, \"domain.Reply\".to_string())\n                    .to_owned(),\n            }\n        }\n        Err(_e) =\u003e Value::new()\n            .state::\u003cState\u003e(\u0026State::default(), \"domain.State\".to_string())\n            .to_owned(),\n    };\n}\n```\n\n```rust\nextern crate env_logger;\nextern crate prost_types;\nextern crate rocket;\n\nmod joe;\n\nuse actors::joe::{set_language, set_language_with_timer};\nuse spawn_rs::actor::{ActorDefinition, ActorSettings, Kind};\nuse spawn_rs::spawn::Spawn;\n\n#[rocket::main]\nasync fn main() -\u003e Result\u003c(), rocket::Error\u003e {\n    let mut spawn: Spawn = Spawn::new()\n        .create(\"spawn-system\".to_string())\n        .with_service_name(env!(\"CARGO_PKG_NAME\").to_string()) // optional\n        .with_service_version(env!(\"CARGO_PKG_VERSION\").to_string()) // optional\n        .with_proxy_port(9003)\n        .with_actor(\n            ActorDefinition::new()\n                .with_settings(\n                    ActorSettings::new()\n                        .name(\"joe\".to_owned())\n                        .kind(Kind::NAMED)\n                        .stateful(true)\n                        .deactivated_timeout(30000) // optional\n                        .snapshot_timeout(10000) // optional\n                        .to_owned(),\n                )\n                .with_action(\"setLanguage\".to_owned(), set_language)\n                .with_timer_action(\n                    \"set_language_with_timer\".to_owned(),\n                    set_language_with_timer,\n                    1000,\n                ),\n        )\n        .clone();\n\n    spawn.start().await?;\n\n    Ok(())\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feigr%2Fspawn-rust-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feigr%2Fspawn-rust-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feigr%2Fspawn-rust-sdk/lists"}