diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f0e5548..3ab6872 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Build +name: Check proto on: push: @@ -36,3 +36,7 @@ jobs: run: | if [ ! -d target ]; then mkdir target; fi protoc --rust_opt='experimental-codegen=enabled,kernel=cpp' --rust_out=./target psh.proto + + - name: Test + run: | + cargo test --workspace diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 08aa0f4..e57b17d 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -1 +1,30 @@ tonic::include_proto!("psh.proto.instance"); + +impl From for Ipv6Addr { + fn from(value: std::net::Ipv6Addr) -> Self { + let ip = value.to_bits().to_be(); + let high = (ip >> 64) as u64; + let low = ip as u64; + Self { + hi_64_bits: high, + lo_64_bits: low, + } + } +} + +#[test] +fn test_ipv6_into_pb_repr() { + use std::net::Ipv6Addr as StdIpv6Addr; + + let var: u128 = 1; + + let raw = StdIpv6Addr::from_bits(var); + + let pb_repr: Ipv6Addr = raw.into(); + + let hi = (pb_repr.hi_64_bits as u128) << 64; + let lo = pb_repr.lo_64_bits as u128; + let ip = StdIpv6Addr::from_bits(u128::from_be(hi | lo)); + + assert_eq!(ip, StdIpv6Addr::from_bits(1)); +}