1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
#![doc(html_logo_url = "https://avatars2.githubusercontent.com/u/52050279?s=200&v=4")] // Copyright 2015-2020 Capital One Services, LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //! # wascc-codec //! //! This library provides the core set of types and associated functions used to facilitate actor //! and host runtime communication for waSCC. /// The version of the codec as seen on crates.io pub const VERSION: &str = env!("CARGO_PKG_VERSION"); /// The string used for the originator of messages dispatched by the host runtime pub const SYSTEM_ACTOR: &str = "system"; #[macro_use] extern crate serde_derive; extern crate log; extern crate rmp_serde as rmps; use rmps::{Deserializer, Serializer}; use serde::{Deserialize, Serialize}; use std::io::Cursor; /// The standard function for serializing codec structs into a format that can be /// used for message exchange between actor and host. Use of any other function to /// serialize could result in breaking incompatibilities. pub fn serialize<T>(item: T) -> ::std::result::Result<Vec<u8>, Box<dyn ::std::error::Error>> where T: Serialize, { let mut buf = Vec::new(); item.serialize(&mut Serializer::new(&mut buf).with_struct_map())?; Ok(buf) } /// The standard function for de-serializing codec structs from a format suitable /// for message exchange between actor and host. Use of any other function to /// deserialize could result in breaking incompatibilities. pub fn deserialize<'de, T: Deserialize<'de>>( buf: &[u8], ) -> ::std::result::Result<T, Box<dyn ::std::error::Error>> { let mut de = Deserializer::new(Cursor::new(buf)); match Deserialize::deserialize(&mut de) { Ok(t) => Ok(t), Err(e) => Err(format!("Failed to de-serialize: {}", e).into()), } } pub trait Sample { fn sample() -> Self; } pub mod blobstore; pub mod capabilities; pub mod core; pub mod eventstreams; pub mod extras; pub mod http; pub mod keyvalue; pub mod logging; pub mod messaging;