diff --git a/Cargo.toml b/Cargo.toml index 26b0421..531611d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,15 +8,15 @@ edition = "2021" [workspace] resolver = "2" -members = ["smip_core", "smip_proc_macros", "someip_types", "vsomeip_compat"] +members = ["crates/smip_core", "crates/smip_proc_macros", "crates/someip_types", "crates/vsomeip_compat"] [dependencies] -smip_core = {path = "smip_core" } +smip_core = {path = "crates/smip_core" } # smip_al = { path = "smip_al" } -smip_proc_macros = {path = "smip_proc_macros"} -someip_types = {path = "someip_types"} -vsomeip_compat = {path = "vsomeip_compat"} +smip_proc_macros = {path = "crates/smip_proc_macros"} +someip_types = {path = "crates/someip_types"} +vsomeip_compat = {path = "crates/vsomeip_compat"} [dev-dependencies] rand = "0.8" diff --git a/crates/smip_al/Cargo.toml b/crates/smip_al/Cargo.toml new file mode 100644 index 0000000..686a291 --- /dev/null +++ b/crates/smip_al/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "smip_al" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +vsomeip-rs = {git = "ssh://git@github.com/tw-sdv/vsomeip-rs"} +someip_types = { path = "../someip_types" } \ No newline at end of file diff --git a/crates/smip_al/src/implementations/mod.rs b/crates/smip_al/src/implementations/mod.rs new file mode 100644 index 0000000..e9e8ff2 --- /dev/null +++ b/crates/smip_al/src/implementations/mod.rs @@ -0,0 +1,2 @@ +mod noop; +mod vsomeip; \ No newline at end of file diff --git a/crates/smip_al/src/implementations/noop.rs b/crates/smip_al/src/implementations/noop.rs new file mode 100644 index 0000000..e69de29 diff --git a/crates/smip_al/src/implementations/vsomeip.rs b/crates/smip_al/src/implementations/vsomeip.rs new file mode 100644 index 0000000..4f4bcbb --- /dev/null +++ b/crates/smip_al/src/implementations/vsomeip.rs @@ -0,0 +1,76 @@ +use std::collections::HashMap; + +use crate::*; +pub struct VSomeIPService { + config: ServiceConfig, + methods: HashMap> +} + +impl Service for VSomeIPService { + type B = vsomeip_rs::Application; + + fn with_method(&mut self, method_id: MethodId, handler: F) where F: FnMut(::M) + 'static { + self.methods.insert(method_id, Box::new(handler)); + } +} + +impl Backend for vsomeip_rs::Application { + type S = VSomeIPService; + type M = vsomeip_rs::Message; + type P = vsomeip_rs::Payload; + + fn init(name: impl AsRef) -> Self { + vsomeip_rs::Runtime::get().create_application_with_name(name) + } + fn create_service(config: &ServiceConfig) -> Self::S { + VSomeIPService { + config: config.clone(), + methods: HashMap::new() + } + } + fn offer_service(&self, service: &Self::S) { + self.offer_service(service.config.id, service.config.instance_id, service.config.major_version, service.config.minor_version); + + for (method_id, handler) in service.methods { + self.register_message_handler(service_id, instance_id, method_id, f) + } + } + fn create_payload(data: &[u8]) -> Self::P { + vsomeip_rs::Payload::with_data(data) + } + fn create_message(header: &SOMEIpHeader, reliable: bool, payload: Self::P) -> Self::M { + let mut message = vsomeip_rs::Message::new(reliable); + + message.set_payload(&payload); + message.set_service(header.service_id); + message.set_method(header.method_id); + message.set_return_code(header.return_code.into()); + // message.set_message_type(); + // message.set_client(); + // message + } +} + + +impl Payload for vsomeip_rs::Payload { + type B = vsomeip_rs::Application; + + fn data(&self) -> &[u8] { + self.get_data() + } + + fn with_data(data: &[u8]) -> Self where Self: Sized { + vsomeip_rs::Payload::with_data(data) + } +} + +impl Message for vsomeip_rs::Message { + type B = vsomeip_rs::Application; + + fn header(&self) -> &S { + // self.header() + } + fn payload(&self) -> &vsomeip_rs::Payload { + self.get_payload() + } +} diff --git a/crates/smip_al/src/lib.rs b/crates/smip_al/src/lib.rs new file mode 100644 index 0000000..59775bd --- /dev/null +++ b/crates/smip_al/src/lib.rs @@ -0,0 +1,60 @@ +// mod implementations; + +use std::net::IpAddr; +use someip_types::*; + +#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)] +pub enum ConnectionType { + #[default] + Tcp, + Udp +} + +#[derive(Debug, Clone)] +pub struct ServiceConfig { + pub name: String, + pub id: ServiceId, + pub instance_id: InstanceId, + pub address: IpAddr, + pub major_version: MajorVersion, + pub minor_version: MinorVersion, + pub port: u16, + pub connection_type: ConnectionType +} + +pub trait Service { + type B: Backend; + fn with_method(&mut self, method_id: MethodId, handler: F) where F: FnMut(::M) + 'static; +} + +pub trait Message { + type B: Backend; + fn header(&self) -> &SOMEIpHeader; + fn payload(&self) -> &::P; +} + +pub trait Payload { + type B: Backend; + fn with_data(data: &[u8]) -> Self where Self: Sized; + fn data(&self) -> &[u8]; +} + +pub trait Backend { + type S: Service; + type M: Message; + type P: Payload; + fn init(name: impl AsRef) -> Self; + fn create_service(config: &ServiceConfig) -> Self::S; + fn offer_service(&self, service: &Self::S); + fn create_payload(data: &[u8]) -> Self::P; + fn create_message(header: &SOMEIpHeader, reliable: bool, payload: Self::P) -> Self::M; +} + + +// vsomeip-rs +// application.init() + + +// let service1 = Service::new(config).method(method_id, |message| {...}); +// backend.offer_service(service1); +// backend.start(); \ No newline at end of file diff --git a/smip_core/Cargo.toml b/crates/smip_core/Cargo.toml similarity index 100% rename from smip_core/Cargo.toml rename to crates/smip_core/Cargo.toml diff --git a/smip_core/src/client.rs b/crates/smip_core/src/client.rs similarity index 100% rename from smip_core/src/client.rs rename to crates/smip_core/src/client.rs diff --git a/smip_core/src/error.rs b/crates/smip_core/src/error.rs similarity index 100% rename from smip_core/src/error.rs rename to crates/smip_core/src/error.rs diff --git a/smip_core/src/lib.rs b/crates/smip_core/src/lib.rs similarity index 100% rename from smip_core/src/lib.rs rename to crates/smip_core/src/lib.rs diff --git a/smip_core/src/runtime.rs b/crates/smip_core/src/runtime.rs similarity index 100% rename from smip_core/src/runtime.rs rename to crates/smip_core/src/runtime.rs diff --git a/smip_core/src/types.rs b/crates/smip_core/src/types.rs similarity index 100% rename from smip_core/src/types.rs rename to crates/smip_core/src/types.rs diff --git a/smip_proc_macros/Cargo.toml b/crates/smip_proc_macros/Cargo.toml similarity index 93% rename from smip_proc_macros/Cargo.toml rename to crates/smip_proc_macros/Cargo.toml index df8f2c8..f481a75 100644 --- a/smip_proc_macros/Cargo.toml +++ b/crates/smip_proc_macros/Cargo.toml @@ -18,4 +18,4 @@ someip_types = {path = "../someip_types"} [dev-dependencies] trybuild = "1.0" -smip = { path = "../" } \ No newline at end of file +smip = { path = "../../" } \ No newline at end of file diff --git a/smip_proc_macros/src/lib.rs b/crates/smip_proc_macros/src/lib.rs similarity index 100% rename from smip_proc_macros/src/lib.rs rename to crates/smip_proc_macros/src/lib.rs diff --git a/smip_proc_macros/src/methods.rs b/crates/smip_proc_macros/src/methods.rs similarity index 100% rename from smip_proc_macros/src/methods.rs rename to crates/smip_proc_macros/src/methods.rs diff --git a/smip_proc_macros/src/service.rs b/crates/smip_proc_macros/src/service.rs similarity index 100% rename from smip_proc_macros/src/service.rs rename to crates/smip_proc_macros/src/service.rs diff --git a/smip_proc_macros/tests/method-no-args.rs b/crates/smip_proc_macros/tests/method-no-args.rs similarity index 100% rename from smip_proc_macros/tests/method-no-args.rs rename to crates/smip_proc_macros/tests/method-no-args.rs diff --git a/smip_proc_macros/tests/method-no-return.rs b/crates/smip_proc_macros/tests/method-no-return.rs similarity index 100% rename from smip_proc_macros/tests/method-no-return.rs rename to crates/smip_proc_macros/tests/method-no-return.rs diff --git a/smip_proc_macros/tests/ui-fail/method-extra-args.rs b/crates/smip_proc_macros/tests/ui-fail/method-extra-args.rs similarity index 100% rename from smip_proc_macros/tests/ui-fail/method-extra-args.rs rename to crates/smip_proc_macros/tests/ui-fail/method-extra-args.rs diff --git a/smip_proc_macros/tests/ui-fail/method-extra-args.stderr b/crates/smip_proc_macros/tests/ui-fail/method-extra-args.stderr similarity index 100% rename from smip_proc_macros/tests/ui-fail/method-extra-args.stderr rename to crates/smip_proc_macros/tests/ui-fail/method-extra-args.stderr diff --git a/smip_proc_macros/tests/ui-fail/method-generic.rs b/crates/smip_proc_macros/tests/ui-fail/method-generic.rs similarity index 100% rename from smip_proc_macros/tests/ui-fail/method-generic.rs rename to crates/smip_proc_macros/tests/ui-fail/method-generic.rs diff --git a/smip_proc_macros/tests/ui-fail/method-generic.stderr b/crates/smip_proc_macros/tests/ui-fail/method-generic.stderr similarity index 100% rename from smip_proc_macros/tests/ui-fail/method-generic.stderr rename to crates/smip_proc_macros/tests/ui-fail/method-generic.stderr diff --git a/smip_proc_macros/tests/ui-fail/method-no-id.rs b/crates/smip_proc_macros/tests/ui-fail/method-no-id.rs similarity index 100% rename from smip_proc_macros/tests/ui-fail/method-no-id.rs rename to crates/smip_proc_macros/tests/ui-fail/method-no-id.rs diff --git a/smip_proc_macros/tests/ui-fail/method-no-id.stderr b/crates/smip_proc_macros/tests/ui-fail/method-no-id.stderr similarity index 100% rename from smip_proc_macros/tests/ui-fail/method-no-id.stderr rename to crates/smip_proc_macros/tests/ui-fail/method-no-id.stderr diff --git a/smip_proc_macros/tests/ui-fail/methods-multiple-impls.rs b/crates/smip_proc_macros/tests/ui-fail/methods-multiple-impls.rs similarity index 100% rename from smip_proc_macros/tests/ui-fail/methods-multiple-impls.rs rename to crates/smip_proc_macros/tests/ui-fail/methods-multiple-impls.rs diff --git a/smip_proc_macros/tests/ui-fail/methods-multiple-impls.stderr b/crates/smip_proc_macros/tests/ui-fail/methods-multiple-impls.stderr similarity index 100% rename from smip_proc_macros/tests/ui-fail/methods-multiple-impls.stderr rename to crates/smip_proc_macros/tests/ui-fail/methods-multiple-impls.stderr diff --git a/smip_proc_macros/tests/ui-fail/methods-trait-impl.rs b/crates/smip_proc_macros/tests/ui-fail/methods-trait-impl.rs similarity index 100% rename from smip_proc_macros/tests/ui-fail/methods-trait-impl.rs rename to crates/smip_proc_macros/tests/ui-fail/methods-trait-impl.rs diff --git a/smip_proc_macros/tests/ui-fail/methods-trait-impl.stderr b/crates/smip_proc_macros/tests/ui-fail/methods-trait-impl.stderr similarity index 100% rename from smip_proc_macros/tests/ui-fail/methods-trait-impl.stderr rename to crates/smip_proc_macros/tests/ui-fail/methods-trait-impl.stderr diff --git a/smip_proc_macros/tests/ui-fail/service-no-id.rs b/crates/smip_proc_macros/tests/ui-fail/service-no-id.rs similarity index 100% rename from smip_proc_macros/tests/ui-fail/service-no-id.rs rename to crates/smip_proc_macros/tests/ui-fail/service-no-id.rs diff --git a/smip_proc_macros/tests/ui-fail/service-no-id.stderr b/crates/smip_proc_macros/tests/ui-fail/service-no-id.stderr similarity index 100% rename from smip_proc_macros/tests/ui-fail/service-no-id.stderr rename to crates/smip_proc_macros/tests/ui-fail/service-no-id.stderr diff --git a/someip_types/Cargo.toml b/crates/someip_types/Cargo.toml similarity index 100% rename from someip_types/Cargo.toml rename to crates/someip_types/Cargo.toml diff --git a/someip_types/src/lib.rs b/crates/someip_types/src/lib.rs similarity index 100% rename from someip_types/src/lib.rs rename to crates/someip_types/src/lib.rs diff --git a/vsomeip_compat/Cargo.toml b/crates/vsomeip_compat/Cargo.toml similarity index 100% rename from vsomeip_compat/Cargo.toml rename to crates/vsomeip_compat/Cargo.toml diff --git a/vsomeip_compat/src/lib.rs b/crates/vsomeip_compat/src/lib.rs similarity index 100% rename from vsomeip_compat/src/lib.rs rename to crates/vsomeip_compat/src/lib.rs diff --git a/vsomeip_config/dashboard.json b/crates/vsomeip_config/dashboard.json similarity index 100% rename from vsomeip_config/dashboard.json rename to crates/vsomeip_config/dashboard.json