Skip to main content

ryra_core/
to_protocol.rs

1//! The reverse of [`crate::from_protocol`]: turn the engine's `ops` request
2//! types into the wire protocol's payloads. A client that builds `ops` requests
3//! (e.g. ryra-api, which constructs them to authorize) uses these to send the
4//! request over rpc. Field-by-field, so a shape change is a compile error.
5
6use ryra_protocol as p;
7
8use crate::Lifecycle;
9use crate::RemoveMode;
10use crate::configure::{ExposureChange, Overrides};
11use crate::ops::{
12    AddRequest, AuthRequested, ConfigureRequest, ExposureRequest, LifecycleRequest, RemoveRequest,
13    UpgradeRequest,
14};
15use crate::registry::service_def::AuthKind;
16
17impl From<ExposureRequest> for p::ExposureRequest {
18    fn from(e: ExposureRequest) -> Self {
19        match e {
20            ExposureRequest::Loopback => p::ExposureRequest::Loopback,
21            ExposureRequest::Url(u) => p::ExposureRequest::Url(u),
22            ExposureRequest::Tailscale(u) => p::ExposureRequest::Tailscale(u),
23        }
24    }
25}
26
27impl From<AuthKind> for p::AuthKind {
28    fn from(k: AuthKind) -> Self {
29        match k {
30            AuthKind::Oidc => p::AuthKind::Oidc,
31        }
32    }
33}
34
35impl From<AuthRequested> for p::AuthRequested {
36    fn from(a: AuthRequested) -> Self {
37        match a {
38            AuthRequested::No => p::AuthRequested::No,
39            AuthRequested::Yes => p::AuthRequested::Yes,
40            AuthRequested::Kind(k) => p::AuthRequested::Kind(k.into()),
41        }
42    }
43}
44
45impl From<AddRequest> for p::AddRequest {
46    fn from(r: AddRequest) -> Self {
47        p::AddRequest {
48            service: r.service,
49            exposure: r.exposure.into(),
50            auth: r.auth.into(),
51            smtp: r.smtp,
52            backup: r.backup,
53            env: r.env,
54            enable_groups: r.enable_groups,
55            choose: r.choose,
56            allow_unset_required: r.allow_unset_required,
57        }
58    }
59}
60
61impl From<RemoveMode> for p::RemoveMode {
62    fn from(m: RemoveMode) -> Self {
63        match m {
64            RemoveMode::Preserve => p::RemoveMode::Preserve,
65            RemoveMode::Purge => p::RemoveMode::Purge,
66        }
67    }
68}
69
70impl From<RemoveRequest> for p::RemoveRequest {
71    fn from(r: RemoveRequest) -> Self {
72        p::RemoveRequest {
73            service: r.service,
74            mode: r.mode.into(),
75        }
76    }
77}
78
79impl From<Lifecycle> for p::Lifecycle {
80    fn from(l: Lifecycle) -> Self {
81        match l {
82            Lifecycle::Start => p::Lifecycle::Start,
83            Lifecycle::Stop => p::Lifecycle::Stop,
84        }
85    }
86}
87
88impl From<LifecycleRequest> for p::LifecycleRequest {
89    fn from(r: LifecycleRequest) -> Self {
90        p::LifecycleRequest {
91            service: r.service,
92            action: r.action.into(),
93        }
94    }
95}
96
97impl From<UpgradeRequest> for p::UpgradeRequest {
98    fn from(r: UpgradeRequest) -> Self {
99        p::UpgradeRequest {
100            service: r.service,
101            force: r.force,
102        }
103    }
104}
105
106impl From<ExposureChange> for p::ExposureChange {
107    fn from(e: ExposureChange) -> Self {
108        match e {
109            ExposureChange::Url(u) => p::ExposureChange::Url(u),
110            ExposureChange::Tailscale(u) => p::ExposureChange::Tailscale(u),
111            ExposureChange::Loopback => p::ExposureChange::Loopback,
112        }
113    }
114}
115
116impl From<Overrides> for p::Overrides {
117    fn from(o: Overrides) -> Self {
118        p::Overrides {
119            exposure: o.exposure.map(Into::into),
120            smtp: o.smtp,
121            backup: o.backup,
122            auth: o.auth,
123            enable_groups: o.enable_groups,
124            disable_groups: o.disable_groups,
125            choose: o.choose,
126            env_overrides: o.env_overrides,
127            reassert_auth: o.reassert_auth,
128        }
129    }
130}
131
132impl From<ConfigureRequest> for p::ConfigureRequest {
133    fn from(r: ConfigureRequest) -> Self {
134        p::ConfigureRequest {
135            service: r.service,
136            changes: r.changes.into(),
137        }
138    }
139}