wick_config/config/common/
component_implementation.rs1use wick_interface_types::OperationSignatures;
2
3use crate::config::{self};
4
5#[derive(Debug, Clone, derive_asset_container::AssetManager, serde::Serialize)]
6#[asset(asset(config::AssetReference))]
7#[must_use]
8#[serde(rename_all = "kebab-case")]
10pub enum ComponentImplementation {
11 Wasm(config::WasmComponentDefinition),
13 WasmRs(config::WasmRsComponent),
15 Composite(config::CompositeComponentImplementation),
17 Sql(config::components::SqlComponentConfig),
19 HttpClient(config::components::HttpClientComponentConfig),
21}
22
23impl ComponentImplementation {
24 pub const fn kind(&self) -> ComponentKind {
26 match self {
27 ComponentImplementation::Wasm(_) => ComponentKind::Wasm,
28 ComponentImplementation::WasmRs(_) => ComponentKind::WasmRs,
29 ComponentImplementation::Composite(_) => ComponentKind::Composite,
30 ComponentImplementation::Sql(_) => ComponentKind::Sql,
31 ComponentImplementation::HttpClient(_) => ComponentKind::HttpClient,
32 }
33 }
34
35 #[must_use]
36 pub fn operation_signatures(&self) -> Vec<wick_interface_types::OperationSignature> {
38 match self {
39 ComponentImplementation::Wasm(c) => c.operation_signatures(),
40 ComponentImplementation::WasmRs(c) => c.operation_signatures(),
41 ComponentImplementation::Composite(c) => c.operation_signatures(),
42 ComponentImplementation::Sql(c) => c.operation_signatures(),
43 ComponentImplementation::HttpClient(c) => c.operation_signatures(),
44 }
45 }
46
47 #[must_use]
48 pub fn default_name(&self) -> &'static str {
50 match self {
51 ComponentImplementation::Wasm(_) => panic!("Wasm components must be named"),
52 ComponentImplementation::WasmRs(_) => panic!("WasmRs components must be named"),
53 ComponentImplementation::Composite(_) => panic!("Composite components must be named"),
54 ComponentImplementation::Sql(_) => "wick/component/sql",
55 ComponentImplementation::HttpClient(_) => "wick/component/http",
56 }
57 }
58}
59
60impl Default for ComponentImplementation {
61 fn default() -> Self {
62 ComponentImplementation::Composite(config::CompositeComponentImplementation::default())
63 }
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, serde::Serialize)]
67#[must_use]
68#[serde(rename_all = "kebab-case")]
70pub enum ComponentKind {
71 Wasm,
73 WasmRs,
75 Composite,
77 Sql,
79 HttpClient,
81}
82
83impl std::fmt::Display for ComponentKind {
84 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
85 match self {
86 ComponentKind::Wasm => write!(f, "wick/component/wasm"),
87 ComponentKind::WasmRs => write!(f, "wick/component/wasmrs"),
88 ComponentKind::Composite => write!(f, "wick/component/composite"),
89 ComponentKind::Sql => write!(f, "wick/component/sql"),
90 ComponentKind::HttpClient => write!(f, "wick/component/http"),
91 }
92 }
93}