wick_config/config/common/
interface.rs

1#![allow(missing_docs)] // delete when we move away from the `property` crate.
2
3use config::common::OperationDefinition;
4use wick_interface_types::{OperationSignatures, TypeDefinition};
5
6use crate::config::components::ComponentConfig;
7use crate::config::{self};
8
9#[derive(Debug, Default, Clone, derive_asset_container::AssetManager, property::Property, serde::Serialize)]
10#[property(get(public), set(private), mut(disable))]
11#[asset(asset(crate::config::AssetReference))]
12#[must_use]
13/// The Wick representation of an interface.
14pub struct InterfaceDefinition {
15  /// Types used by the interface's operations.
16  #[asset(skip)]
17  #[serde(skip_serializing_if = "Vec::is_empty")]
18  pub(crate) types: Vec<TypeDefinition>,
19
20  /// The operations the interface exposes.
21  #[asset(skip)]
22  #[property(skip)]
23  #[serde(skip_serializing_if = "Vec::is_empty")]
24  pub(crate) operations: Vec<OperationDefinition>,
25}
26
27impl ComponentConfig for InterfaceDefinition {
28  type Operation = OperationDefinition;
29
30  fn operations(&self) -> &[Self::Operation] {
31    &self.operations
32  }
33
34  fn operations_mut(&mut self) -> &mut Vec<Self::Operation> {
35    &mut self.operations
36  }
37}
38
39impl OperationSignatures for InterfaceDefinition {
40  fn operation_signatures(&self) -> Vec<wick_interface_types::OperationSignature> {
41    self.operations.iter().cloned().map(Into::into).collect()
42  }
43}