wadm_types/
bindings.rs

1use crate::{
2    api::{
3        ComponentStatus, DeleteResult, GetResult, ModelSummary, PutResult, Status, StatusInfo,
4        StatusResult, StatusType, TraitStatus, VersionInfo,
5    },
6    CapabilityProperties, Component, ComponentProperties, ConfigDefinition, ConfigProperty,
7    LinkProperty, Manifest, Metadata, Policy, Properties, SecretProperty, SecretSourceProperty,
8    SharedApplicationComponentProperties, Specification, Spread, SpreadScalerProperty,
9    TargetConfig, Trait, TraitProperty,
10};
11use wasmcloud::wadm;
12
13#[cfg(all(feature = "wit", target_family = "wasm"))]
14wit_bindgen::generate!({
15    path: "wit",
16    additional_derives: [
17        serde::Serialize,
18        serde::Deserialize,
19    ],
20    with: {
21        "wasmcloud:wadm/types@0.2.0": generate,
22        "wasmcloud:wadm/client@0.2.0": generate,
23        "wasmcloud:wadm/handler@0.2.0": generate
24    }
25});
26
27#[cfg(all(feature = "wit", not(target_family = "wasm")))]
28wit_bindgen_wrpc::generate!({
29    generate_unused_types: true,
30    additional_derives: [
31        serde::Serialize,
32        serde::Deserialize,
33    ],
34    with: {
35        "wasmcloud:wadm/types@0.2.0": generate,
36        "wasmcloud:wadm/client@0.2.0": generate,
37        "wasmcloud:wadm/handler@0.2.0": generate
38    }
39});
40
41// Trait implementations for converting types in the API module to the generated types
42
43impl From<Manifest> for wadm::types::OamManifest {
44    fn from(manifest: Manifest) -> Self {
45        wadm::types::OamManifest {
46            api_version: manifest.api_version.to_string(),
47            kind: manifest.kind.to_string(),
48            metadata: manifest.metadata.into(),
49            spec: manifest.spec.into(),
50        }
51    }
52}
53
54impl From<Metadata> for wadm::types::Metadata {
55    fn from(metadata: Metadata) -> Self {
56        wadm::types::Metadata {
57            name: metadata.name,
58            annotations: metadata.annotations.into_iter().collect(),
59            labels: metadata.labels.into_iter().collect(),
60        }
61    }
62}
63
64impl From<Specification> for wadm::types::Specification {
65    fn from(spec: Specification) -> Self {
66        wadm::types::Specification {
67            components: spec.components.into_iter().map(|c| c.into()).collect(),
68            policies: spec.policies.into_iter().map(|c| c.into()).collect(),
69        }
70    }
71}
72
73impl From<Component> for wadm::types::Component {
74    fn from(component: Component) -> Self {
75        wadm::types::Component {
76            name: component.name,
77            properties: component.properties.into(),
78            traits: component
79                .traits
80                .map(|traits| traits.into_iter().map(|t| t.into()).collect()),
81        }
82    }
83}
84
85impl From<Policy> for wadm::types::Policy {
86    fn from(policy: Policy) -> Self {
87        wadm::types::Policy {
88            name: policy.name,
89            properties: policy.properties.into_iter().collect(),
90            type_: policy.policy_type,
91        }
92    }
93}
94
95impl From<Properties> for wadm::types::Properties {
96    fn from(properties: Properties) -> Self {
97        match properties {
98            Properties::Component { properties } => {
99                wadm::types::Properties::Component(properties.into())
100            }
101            Properties::Capability { properties } => {
102                wadm::types::Properties::Capability(properties.into())
103            }
104        }
105    }
106}
107
108impl From<ComponentProperties> for wadm::types::ComponentProperties {
109    fn from(properties: ComponentProperties) -> Self {
110        wadm::types::ComponentProperties {
111            application: properties.application.map(Into::into),
112            image: properties.image,
113            id: properties.id,
114            config: properties.config.into_iter().map(|c| c.into()).collect(),
115            secrets: properties.secrets.into_iter().map(|c| c.into()).collect(),
116        }
117    }
118}
119
120impl From<CapabilityProperties> for wadm::types::CapabilityProperties {
121    fn from(properties: CapabilityProperties) -> Self {
122        wadm::types::CapabilityProperties {
123            application: properties.application.map(Into::into),
124            image: properties.image,
125            id: properties.id,
126            config: properties.config.into_iter().map(|c| c.into()).collect(),
127            secrets: properties.secrets.into_iter().map(|c| c.into()).collect(),
128        }
129    }
130}
131
132impl From<ConfigProperty> for wadm::types::ConfigProperty {
133    fn from(property: ConfigProperty) -> Self {
134        wadm::types::ConfigProperty {
135            name: property.name,
136            properties: property.properties.map(|props| props.into_iter().collect()),
137        }
138    }
139}
140
141impl From<SecretProperty> for wadm::types::SecretProperty {
142    fn from(property: SecretProperty) -> Self {
143        wadm::types::SecretProperty {
144            name: property.name,
145            properties: property.properties.into(),
146        }
147    }
148}
149
150impl From<SecretSourceProperty> for wadm::types::SecretSourceProperty {
151    fn from(property: SecretSourceProperty) -> Self {
152        wadm::types::SecretSourceProperty {
153            policy: property.policy,
154            key: property.key,
155            field: property.field,
156            version: property.version,
157        }
158    }
159}
160
161impl From<SharedApplicationComponentProperties>
162    for wadm::types::SharedApplicationComponentProperties
163{
164    fn from(properties: SharedApplicationComponentProperties) -> Self {
165        wadm::types::SharedApplicationComponentProperties {
166            name: properties.name,
167            component: properties.component,
168        }
169    }
170}
171
172impl From<Trait> for wadm::types::Trait {
173    fn from(trait_: Trait) -> Self {
174        wadm::types::Trait {
175            trait_type: trait_.trait_type,
176            properties: trait_.properties.into(),
177        }
178    }
179}
180
181impl From<TraitProperty> for wadm::types::TraitProperty {
182    fn from(property: TraitProperty) -> Self {
183        match property {
184            TraitProperty::Link(link) => wadm::types::TraitProperty::Link(link.into()),
185            TraitProperty::SpreadScaler(spread) => {
186                wadm::types::TraitProperty::Spreadscaler(spread.into())
187            }
188            TraitProperty::Custom(custom) => wadm::types::TraitProperty::Custom(custom.to_string()),
189        }
190    }
191}
192
193impl From<LinkProperty> for wadm::types::LinkProperty {
194    fn from(property: LinkProperty) -> Self {
195        wadm::types::LinkProperty {
196            source: property.source.map(|c| c.into()),
197            target: property.target.into(),
198            namespace: property.namespace,
199            package: property.package,
200            interfaces: property.interfaces,
201            name: property.name,
202        }
203    }
204}
205
206impl From<ConfigDefinition> for wadm::types::ConfigDefinition {
207    fn from(definition: ConfigDefinition) -> Self {
208        wadm::types::ConfigDefinition {
209            config: definition.config.into_iter().map(|c| c.into()).collect(),
210            secrets: definition.secrets.into_iter().map(|s| s.into()).collect(),
211        }
212    }
213}
214
215impl From<TargetConfig> for wadm::types::TargetConfig {
216    fn from(config: TargetConfig) -> Self {
217        wadm::types::TargetConfig {
218            name: config.name,
219            config: config.config.into_iter().map(|c| c.into()).collect(),
220            secrets: config.secrets.into_iter().map(|s| s.into()).collect(),
221        }
222    }
223}
224
225impl From<SpreadScalerProperty> for wadm::types::SpreadscalerProperty {
226    fn from(property: SpreadScalerProperty) -> Self {
227        wadm::types::SpreadscalerProperty {
228            instances: property.instances as u32,
229            spread: property.spread.into_iter().map(|s| s.into()).collect(),
230        }
231    }
232}
233
234impl From<Spread> for wadm::types::Spread {
235    fn from(spread: Spread) -> Self {
236        wadm::types::Spread {
237            name: spread.name,
238            requirements: spread.requirements.into_iter().collect(),
239            weight: spread.weight.map(|w| w as u32),
240        }
241    }
242}
243
244impl From<ModelSummary> for wadm::types::ModelSummary {
245    fn from(summary: ModelSummary) -> Self {
246        wadm::types::ModelSummary {
247            name: summary.name,
248            version: summary.version,
249            description: summary.description,
250            deployed_version: summary.deployed_version,
251            status: summary.status.into(),
252            status_message: summary.status_message,
253        }
254    }
255}
256
257impl From<DeleteResult> for wadm::types::DeleteResult {
258    fn from(result: DeleteResult) -> Self {
259        match result {
260            DeleteResult::Deleted => wadm::types::DeleteResult::Deleted,
261            DeleteResult::Error => wadm::types::DeleteResult::Error,
262            DeleteResult::Noop => wadm::types::DeleteResult::Noop,
263        }
264    }
265}
266
267impl From<GetResult> for wadm::types::GetResult {
268    fn from(result: GetResult) -> Self {
269        match result {
270            GetResult::Error => wadm::types::GetResult::Error,
271            GetResult::Success => wadm::types::GetResult::Success,
272            GetResult::NotFound => wadm::types::GetResult::NotFound,
273        }
274    }
275}
276
277impl From<PutResult> for wadm::types::PutResult {
278    fn from(result: PutResult) -> Self {
279        match result {
280            PutResult::Error => wadm::types::PutResult::Error,
281            PutResult::Created => wadm::types::PutResult::Created,
282            PutResult::NewVersion => wadm::types::PutResult::NewVersion,
283        }
284    }
285}
286
287impl From<StatusType> for wadm::types::StatusType {
288    fn from(status: StatusType) -> Self {
289        match status {
290            StatusType::Undeployed => wadm::types::StatusType::Undeployed,
291            StatusType::Reconciling => wadm::types::StatusType::Reconciling,
292            StatusType::Deployed => wadm::types::StatusType::Deployed,
293            StatusType::Failed => wadm::types::StatusType::Failed,
294            StatusType::Waiting => wadm::types::StatusType::Waiting,
295            StatusType::Unhealthy => wadm::types::StatusType::Unhealthy,
296        }
297    }
298}
299
300// Trait implementations for converting generated types to the types in the API module
301
302impl From<wadm::types::StatusType> for StatusType {
303    fn from(status: wadm::types::StatusType) -> Self {
304        match status {
305            wadm::types::StatusType::Undeployed => StatusType::Undeployed,
306            wadm::types::StatusType::Reconciling => StatusType::Reconciling,
307            wadm::types::StatusType::Deployed => StatusType::Deployed,
308            wadm::types::StatusType::Failed => StatusType::Failed,
309            wadm::types::StatusType::Waiting => StatusType::Waiting,
310            wadm::types::StatusType::Unhealthy => StatusType::Unhealthy,
311        }
312    }
313}
314
315impl From<wadm::types::StatusInfo> for StatusInfo {
316    fn from(info: wadm::types::StatusInfo) -> Self {
317        StatusInfo {
318            status_type: info.status_type.into(),
319            message: info.message,
320        }
321    }
322}
323
324impl From<wadm::types::ComponentStatus> for ComponentStatus {
325    fn from(status: wadm::types::ComponentStatus) -> Self {
326        ComponentStatus {
327            name: status.name,
328            component_type: status.component_type,
329            info: status.info.into(),
330            traits: status
331                .traits
332                .into_iter()
333                .map(|t| TraitStatus {
334                    trait_type: t.trait_type,
335                    info: t.info.into(),
336                })
337                .collect(),
338        }
339    }
340}
341
342impl From<wadm::types::TraitStatus> for TraitStatus {
343    fn from(status: wadm::types::TraitStatus) -> Self {
344        TraitStatus {
345            trait_type: status.trait_type,
346            info: status.info.into(),
347        }
348    }
349}
350
351impl From<wadm::types::StatusResult> for StatusResult {
352    fn from(result: wadm::types::StatusResult) -> Self {
353        match result {
354            wadm::types::StatusResult::Error => StatusResult::Error,
355            wadm::types::StatusResult::Ok => StatusResult::Ok,
356            wadm::types::StatusResult::NotFound => StatusResult::NotFound,
357        }
358    }
359}
360
361impl From<wadm::types::OamManifest> for Manifest {
362    fn from(manifest: wadm::types::OamManifest) -> Self {
363        Manifest {
364            api_version: manifest.api_version,
365            kind: manifest.kind,
366            metadata: manifest.metadata.into(),
367            spec: manifest.spec.into(),
368        }
369    }
370}
371
372impl From<wadm::types::Metadata> for Metadata {
373    fn from(metadata: wadm::types::Metadata) -> Self {
374        Metadata {
375            name: metadata.name,
376            annotations: metadata.annotations.into_iter().collect(),
377            labels: metadata.labels.into_iter().collect(),
378        }
379    }
380}
381
382impl From<wadm::types::Specification> for Specification {
383    fn from(spec: wadm::types::Specification) -> Self {
384        Specification {
385            components: spec.components.into_iter().map(|c| c.into()).collect(),
386            policies: spec.policies.into_iter().map(|c| c.into()).collect(),
387        }
388    }
389}
390
391impl From<wadm::types::Component> for Component {
392    fn from(component: wadm::types::Component) -> Self {
393        Component {
394            name: component.name,
395            properties: component.properties.into(),
396            traits: component
397                .traits
398                .map(|traits| traits.into_iter().map(|t| t.into()).collect()),
399        }
400    }
401}
402
403impl From<wadm::types::Policy> for Policy {
404    fn from(policy: wadm::types::Policy) -> Self {
405        Policy {
406            name: policy.name,
407            properties: policy.properties.into_iter().collect(),
408            policy_type: policy.type_,
409        }
410    }
411}
412
413impl From<wadm::types::Properties> for Properties {
414    fn from(properties: wadm::types::Properties) -> Self {
415        match properties {
416            wadm::types::Properties::Component(properties) => Properties::Component {
417                properties: properties.into(),
418            },
419            wadm::types::Properties::Capability(properties) => Properties::Capability {
420                properties: properties.into(),
421            },
422        }
423    }
424}
425
426impl From<wadm::types::ComponentProperties> for ComponentProperties {
427    fn from(properties: wadm::types::ComponentProperties) -> Self {
428        ComponentProperties {
429            image: properties.image,
430            application: properties.application.map(Into::into),
431            id: properties.id,
432            config: properties.config.into_iter().map(|c| c.into()).collect(),
433            secrets: properties.secrets.into_iter().map(|c| c.into()).collect(),
434        }
435    }
436}
437
438impl From<wadm::types::CapabilityProperties> for CapabilityProperties {
439    fn from(properties: wadm::types::CapabilityProperties) -> Self {
440        CapabilityProperties {
441            image: properties.image,
442            application: properties.application.map(Into::into),
443            id: properties.id,
444            config: properties.config.into_iter().map(|c| c.into()).collect(),
445            secrets: properties.secrets.into_iter().map(|c| c.into()).collect(),
446        }
447    }
448}
449
450impl From<wadm::types::ConfigProperty> for ConfigProperty {
451    fn from(property: wadm::types::ConfigProperty) -> Self {
452        ConfigProperty {
453            name: property.name,
454            properties: property.properties.map(|props| props.into_iter().collect()),
455        }
456    }
457}
458
459impl From<wadm::types::SecretProperty> for SecretProperty {
460    fn from(property: wadm::types::SecretProperty) -> Self {
461        SecretProperty {
462            name: property.name,
463            properties: property.properties.into(),
464        }
465    }
466}
467
468impl From<wadm::types::SecretSourceProperty> for SecretSourceProperty {
469    fn from(property: wadm::types::SecretSourceProperty) -> Self {
470        SecretSourceProperty {
471            policy: property.policy,
472            key: property.key,
473            field: property.field,
474            version: property.version,
475        }
476    }
477}
478
479impl From<wadm::types::SharedApplicationComponentProperties>
480    for SharedApplicationComponentProperties
481{
482    fn from(properties: wadm::types::SharedApplicationComponentProperties) -> Self {
483        SharedApplicationComponentProperties {
484            name: properties.name,
485            component: properties.component,
486        }
487    }
488}
489
490impl From<wadm::types::Trait> for Trait {
491    fn from(trait_: wadm::types::Trait) -> Self {
492        Trait {
493            trait_type: trait_.trait_type,
494            properties: trait_.properties.into(),
495        }
496    }
497}
498
499impl From<wadm::types::TraitProperty> for TraitProperty {
500    fn from(property: wadm::types::TraitProperty) -> Self {
501        match property {
502            wadm::types::TraitProperty::Link(link) => TraitProperty::Link(link.into()),
503            wadm::types::TraitProperty::Spreadscaler(spread) => {
504                TraitProperty::SpreadScaler(spread.into())
505            }
506            wadm::types::TraitProperty::Custom(custom) => {
507                TraitProperty::Custom(serde_json::value::Value::String(custom))
508            }
509        }
510    }
511}
512
513impl From<wadm::types::LinkProperty> for LinkProperty {
514    fn from(property: wadm::types::LinkProperty) -> Self {
515        #[allow(deprecated)]
516        LinkProperty {
517            source: property.source.map(|c| c.into()),
518            target: property.target.into(),
519            namespace: property.namespace,
520            package: property.package,
521            interfaces: property.interfaces,
522            name: property.name,
523            source_config: None,
524            target_config: None,
525        }
526    }
527}
528
529impl From<wadm::types::ConfigDefinition> for ConfigDefinition {
530    fn from(definition: wadm::types::ConfigDefinition) -> Self {
531        ConfigDefinition {
532            config: definition.config.into_iter().map(|c| c.into()).collect(),
533            secrets: definition.secrets.into_iter().map(|s| s.into()).collect(),
534        }
535    }
536}
537
538impl From<wadm::types::TargetConfig> for TargetConfig {
539    fn from(config: wadm::types::TargetConfig) -> Self {
540        TargetConfig {
541            name: config.name,
542            config: config.config.into_iter().map(|c| c.into()).collect(),
543            secrets: config.secrets.into_iter().map(|s| s.into()).collect(),
544        }
545    }
546}
547
548impl From<wadm::types::SpreadscalerProperty> for SpreadScalerProperty {
549    fn from(property: wadm::types::SpreadscalerProperty) -> Self {
550        SpreadScalerProperty {
551            instances: property.instances as usize,
552            spread: property.spread.into_iter().map(|s| s.into()).collect(),
553        }
554    }
555}
556
557impl From<wadm::types::Spread> for Spread {
558    fn from(spread: wadm::types::Spread) -> Self {
559        Spread {
560            name: spread.name,
561            requirements: spread.requirements.into_iter().collect(),
562            weight: spread.weight.map(|w| w as usize),
563        }
564    }
565}
566
567impl From<VersionInfo> for wadm::types::VersionInfo {
568    fn from(info: VersionInfo) -> Self {
569        wasmcloud::wadm::types::VersionInfo {
570            version: info.version,
571            deployed: info.deployed,
572        }
573    }
574}
575
576// Implement the From trait for StatusInfo
577impl From<StatusInfo> for wadm::types::StatusInfo {
578    fn from(info: StatusInfo) -> Self {
579        wadm::types::StatusInfo {
580            status_type: info.status_type.into(),
581            message: info.message,
582        }
583    }
584}
585
586// Implement the From trait for Status
587impl From<Status> for wadm::types::Status {
588    fn from(status: Status) -> Self {
589        wadm::types::Status {
590            version: status.version,
591            info: status.info.into(),
592            components: status.components.into_iter().map(|c| c.into()).collect(),
593        }
594    }
595}
596
597// Implement the From trait for ComponentStatus
598impl From<ComponentStatus> for wadm::types::ComponentStatus {
599    fn from(component_status: ComponentStatus) -> Self {
600        wadm::types::ComponentStatus {
601            name: component_status.name,
602            component_type: component_status.component_type,
603            info: component_status.info.into(),
604            traits: component_status
605                .traits
606                .into_iter()
607                .map(|t| t.into())
608                .collect(),
609        }
610    }
611}
612
613// Implement the From trait for TraitStatus
614impl From<TraitStatus> for wadm::types::TraitStatus {
615    fn from(trait_status: TraitStatus) -> Self {
616        wadm::types::TraitStatus {
617            trait_type: trait_status.trait_type,
618            info: trait_status.info.into(),
619        }
620    }
621}