Skip to main content

ryra_core/
from_protocol.rs

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