authly_common/
proto.rs

1//! Authly protobuf types.
2
3/// Tonic types for the `authly_connect` protobuf definition.
4pub mod connect {
5    tonic::include_proto!("authly.connect");
6}
7
8/// Tonic types for the `authly_mandate_submission` protobuf definition.
9pub mod mandate_submission {
10    tonic::include_proto!("authly.mandate_submission");
11}
12
13/// Tonic types for the `authly_service` protobuf definition.
14pub mod service {
15    tonic::include_proto!("authly.service");
16}
17
18/// Convert a protobuf Value to a JSON value.
19pub fn proto_value_to_json(value: prost_types::Value) -> serde_json::Value {
20    use prost_types::value::Kind;
21    use serde_json::Value;
22
23    match value.kind {
24        Some(Kind::NullValue(_)) => Value::Null,
25        Some(Kind::NumberValue(n)) => serde_json::Number::from_f64(n)
26            .map(Value::Number)
27            .unwrap_or(Value::Null),
28        Some(Kind::StringValue(s)) => Value::String(s),
29        Some(Kind::BoolValue(b)) => Value::Bool(b),
30        Some(Kind::StructValue(s)) => Value::Object(proto_struct_to_json(s)),
31        Some(Kind::ListValue(l)) => {
32            Value::Array(l.values.into_iter().map(proto_value_to_json).collect())
33        }
34        None => serde_json::Value::Null,
35    }
36}
37
38/// Convert a protobuf Struct to a JSON value.
39pub fn proto_struct_to_json(
40    proto: prost_types::Struct,
41) -> serde_json::Map<String, serde_json::Value> {
42    let mut map = serde_json::Map::default();
43
44    for (key, value) in proto.fields {
45        map.insert(key, proto_value_to_json(value));
46    }
47
48    map
49}