add serialization prototyping
All checks were successful
Rust/sat-rs/pipeline/head This commit looks good
All checks were successful
Rust/sat-rs/pipeline/head This commit looks good
This commit is contained in:
parent
312849bddb
commit
b970154488
1
serialization-prototyping/.gitignore
vendored
Normal file
1
serialization-prototyping/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/target
|
161
serialization-prototyping/Cargo.lock
generated
Normal file
161
serialization-prototyping/Cargo.lock
generated
Normal file
@ -0,0 +1,161 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
|
||||
|
||||
[[package]]
|
||||
name = "msg-pack-test"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"rmp-serde",
|
||||
"rmpv",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-traits"
|
||||
version = "0.2.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "paste"
|
||||
version = "1.0.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.81"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rmp"
|
||||
version = "0.8.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"num-traits",
|
||||
"paste",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rmp-serde"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "938a142ab806f18b88a97b0dea523d39e0fd730a064b035726adcfc58a8a5188"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"rmp",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rmpv"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e540282f11751956c82bc5529a7fb71b871b998fbf9cf06c2419b22e1b4350df"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
"rmp",
|
||||
"serde",
|
||||
"serde_bytes",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.198"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_bytes"
|
||||
version = "0.11.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.198"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.116"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.60"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
|
12
serialization-prototyping/Cargo.toml
Normal file
12
serialization-prototyping/Cargo.toml
Normal file
@ -0,0 +1,12 @@
|
||||
[package]
|
||||
name = "msg-pack-test"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
rmp-serde = "1"
|
||||
rmpv = { version = "1", features = ["with-serde"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1"
|
1
serialization-prototyping/python-test/.gitignore
vendored
Normal file
1
serialization-prototyping/python-test/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/venv
|
22
serialization-prototyping/python-test/main.py
Executable file
22
serialization-prototyping/python-test/main.py
Executable file
@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env python3
|
||||
from socket import AF_INET, SOCK_DGRAM, socket
|
||||
import msgpack
|
||||
|
||||
nadine = {
|
||||
"age": 24,
|
||||
"name": "Nadine",
|
||||
}
|
||||
|
||||
msg_pack_stuff = msgpack.packb(nadine)
|
||||
assert msg_pack_stuff is not None
|
||||
server_socket = socket(AF_INET, SOCK_DGRAM)
|
||||
target_address = "localhost", 7301
|
||||
bytes_sent = server_socket.sendto(msg_pack_stuff, target_address)
|
||||
recv_back = server_socket.recv(4096)
|
||||
print(f"recv back: {recv_back}")
|
||||
|
||||
unpacked = msgpack.unpackb(recv_back)
|
||||
print(f"unpacked: {unpacked}")
|
||||
# human_test = {:x for x in unpacked}
|
||||
loaded_back = msgpack.loads(recv_back)
|
||||
print(loaded_back)
|
1
serialization-prototyping/python-test/requirements.txt
Normal file
1
serialization-prototyping/python-test/requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
msgpack==1.0.8
|
94
serialization-prototyping/src/main.rs
Normal file
94
serialization-prototyping/src/main.rs
Normal file
@ -0,0 +1,94 @@
|
||||
use rmp_serde::{Deserializer, Serializer};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{collections::HashMap, net::UdpSocket};
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Deserialize, Serialize)]
|
||||
pub enum Color {
|
||||
Red = 0,
|
||||
Green = 1,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
|
||||
struct Human {
|
||||
age: u16,
|
||||
name: String,
|
||||
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
|
||||
struct HumanAdvanced {
|
||||
id: u32,
|
||||
age: u16,
|
||||
name: String,
|
||||
fav_color: Color,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
|
||||
struct HumanGroup {
|
||||
humans: Vec<HumanAdvanced>,
|
||||
bank: HashMap<u32, usize>,
|
||||
}
|
||||
|
||||
fn wild_testing() {
|
||||
let mut buf = Vec::new();
|
||||
let john = HumanAdvanced {
|
||||
id: 0,
|
||||
age: 42,
|
||||
name: "John".into(),
|
||||
fav_color: Color::Green,
|
||||
};
|
||||
|
||||
john.serialize(&mut Serializer::new(&mut buf)).unwrap();
|
||||
|
||||
println!("{:?}", buf);
|
||||
let new_val: HumanAdvanced = rmp_serde::from_slice(&buf).expect("deserialization failed");
|
||||
let rmpv_val: rmpv::Value = rmp_serde::from_slice(&buf).expect("serialization into val failed");
|
||||
println!("RMPV value: {:?}", rmpv_val);
|
||||
let json_str = serde_json::to_string(&rmpv_val).expect("creating json failed");
|
||||
assert_eq!(john, new_val);
|
||||
println!("JSON str: {}", json_str);
|
||||
let val_test: HumanAdvanced = serde_json::from_str(&json_str).expect("wild");
|
||||
println!("val test: {:?}", val_test);
|
||||
|
||||
let nadine = HumanAdvanced {
|
||||
id: 1,
|
||||
age: 24,
|
||||
name: "Nadine".into(),
|
||||
fav_color: Color::Red,
|
||||
};
|
||||
let mut bank = HashMap::default();
|
||||
bank.insert(john.id, 1000000);
|
||||
bank.insert(nadine.id, 1);
|
||||
|
||||
let human_group = HumanGroup {
|
||||
humans: vec![john, nadine.clone()],
|
||||
bank,
|
||||
};
|
||||
let json_str = serde_json::to_string(&nadine).unwrap();
|
||||
println!("Nadine as JSON: {}", json_str);
|
||||
|
||||
let nadine_is_back: HumanAdvanced = serde_json::from_str(&json_str).unwrap();
|
||||
println!("nadine deserialized: {:?}", nadine_is_back);
|
||||
|
||||
let human_group_json = serde_json::to_string(&human_group).unwrap();
|
||||
println!("human group: {}", human_group_json);
|
||||
println!("human group json size: {}", human_group_json.len());
|
||||
|
||||
let human_group_rmp_vec = rmp_serde::to_vec(&human_group_json).unwrap();
|
||||
println!("human group msg pack size: {:?}", human_group_rmp_vec.len());
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let socket = UdpSocket::bind("127.0.0.1:7301").expect("binding UDP socket failed");
|
||||
|
||||
// Receives a single datagram message on the socket. If `buf` is too small to hold
|
||||
// the message, it will be cut off.
|
||||
let mut buf = [0; 4096];
|
||||
let (received, src) = socket.recv_from(&mut buf).expect("receive call failed");
|
||||
let human_from_python: rmpv::Value = rmp_serde::from_slice(&buf[..received]).expect("blablah");
|
||||
let human_attempt_2: Human = rmp_serde::from_slice(&buf[..received]).expect("blhfwhfw");
|
||||
println!("human from python: {}", human_from_python);
|
||||
println!("human 2 from python: {:?}", human_attempt_2);
|
||||
let send_back_human = rmp_serde::to_vec(&human_attempt_2).expect("k32k323k2");
|
||||
socket.send_to(&send_back_human, src).expect("sending back failed");
|
||||
}
|
Loading…
Reference in New Issue
Block a user