wick_config/v1/
helpers.rs

1use std::str::FromStr;
2
3use serde::ser::SerializeMap;
4use serde::{Deserialize, Serialize, Serializer};
5
6mod flow_ast;
7mod interface_types;
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10pub struct LocationReference(pub(super) String);
11
12#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13
14pub struct Glob(pub(super) String);
15
16#[allow(clippy::from_over_into)]
17impl Into<String> for super::TypeSignature {
18  fn into(self) -> String {
19    let ty: wick_interface_types::Type = self.try_into().unwrap();
20    ty.to_string()
21  }
22}
23
24#[allow(clippy::from_over_into)]
25impl Into<String> for super::ConnectionDefinition {
26  fn into(self) -> String {
27    let ty: flow_expression_parser::ast::ConnectionExpression = self.try_into().unwrap();
28    ty.to_string()
29  }
30}
31
32#[allow(clippy::from_over_into)]
33impl Into<String> for super::ComponentReference {
34  fn into(self) -> String {
35    self.id
36  }
37}
38
39pub(super) fn serialize_component_expression<S>(
40  value: &super::ComponentOperationExpression,
41  s: S,
42) -> Result<S::Ok, S::Error>
43where
44  S: Serializer,
45{
46  let name = match &value.component {
47    super::ComponentDefinition::ComponentReference(r) => &r.id,
48    _ => return value.serialize(s),
49  };
50
51  if value.with.is_none() {
52    s.serialize_str(&format!("{}::{}", name, value.name))
53  } else {
54    let mut m = if value.timeout.is_some() {
55      s.serialize_map(Some(4))?
56    } else {
57      s.serialize_map(Some(3))?
58    };
59    m.serialize_entry("name", &value.name)?;
60    m.serialize_entry("component", &name)?;
61    m.serialize_entry("with", &value.with)?;
62    if let Some(timeout) = &value.timeout {
63      m.serialize_entry("timeout", timeout)?;
64    }
65    m.end()
66  }
67}