vector_config/external/
serde_with.rs1use std::cell::RefCell;
2
3use vector_config_common::{attributes::CustomAttribute, constants};
4
5use crate::{
6 Configurable, GenerateError, Metadata,
7 num::NumberClass,
8 schema::{SchemaGenerator, SchemaObject, generate_number_schema, generate_optional_schema},
9};
10
11impl<T> Configurable for serde_with::As<T>
13where
14 T: Configurable,
15{
16 fn referenceable_name() -> Option<&'static str> {
17 T::referenceable_name()
19 }
20
21 fn metadata() -> Metadata {
22 T::metadata().convert()
28 }
29
30 fn validate_metadata(metadata: &Metadata) -> Result<(), GenerateError> {
31 let converted = metadata.convert();
37 T::validate_metadata(&converted)
38 }
39
40 fn generate_schema(
41 generator: &RefCell<SchemaGenerator>,
42 ) -> Result<SchemaObject, GenerateError> {
43 T::generate_schema(generator)
49 }
50}
51
52impl Configurable for serde_with::DurationSeconds<u64, serde_with::formats::Strict> {
53 fn referenceable_name() -> Option<&'static str> {
54 Some("serde_with::DurationSeconds")
58 }
59
60 fn metadata() -> Metadata {
61 let mut metadata = Metadata::default();
62 metadata.set_description("A span of time, in whole seconds.");
63 metadata.add_custom_attribute(CustomAttribute::kv(
64 constants::DOCS_META_NUMERIC_TYPE,
65 NumberClass::Unsigned,
66 ));
67 metadata.add_custom_attribute(CustomAttribute::kv(
68 constants::DOCS_META_TYPE_UNIT,
69 "seconds",
70 ));
71 metadata
72 }
73
74 fn generate_schema(_: &RefCell<SchemaGenerator>) -> Result<SchemaObject, GenerateError> {
75 Ok(generate_number_schema::<u64>())
78 }
79}
80
81impl Configurable for serde_with::DurationSecondsWithFrac<f64, serde_with::formats::Strict> {
82 fn referenceable_name() -> Option<&'static str> {
83 Some("serde_with::DurationFractionalSeconds")
87 }
88
89 fn metadata() -> Metadata {
90 let mut metadata = Metadata::default();
91 metadata.set_description("A span of time, in fractional seconds.");
92 metadata.add_custom_attribute(CustomAttribute::kv(
93 constants::DOCS_META_NUMERIC_TYPE,
94 NumberClass::FloatingPoint,
95 ));
96 metadata.add_custom_attribute(CustomAttribute::kv(
97 constants::DOCS_META_TYPE_UNIT,
98 "seconds",
99 ));
100 metadata
101 }
102
103 fn generate_schema(_: &RefCell<SchemaGenerator>) -> Result<SchemaObject, GenerateError> {
104 Ok(generate_number_schema::<f64>())
107 }
108}
109
110impl Configurable for serde_with::DurationMilliSeconds<u64, serde_with::formats::Strict> {
111 fn referenceable_name() -> Option<&'static str> {
112 Some("serde_with::DurationMilliSeconds")
115 }
116
117 fn metadata() -> Metadata {
118 let mut metadata = Metadata::default();
119 metadata.set_description("A span of time, in whole milliseconds.");
120 metadata.add_custom_attribute(CustomAttribute::kv(
121 constants::DOCS_META_NUMERIC_TYPE,
122 NumberClass::Unsigned,
123 ));
124 metadata.add_custom_attribute(CustomAttribute::kv(
125 constants::DOCS_META_TYPE_UNIT,
126 "milliseconds",
127 ));
128 metadata
129 }
130
131 fn generate_schema(_: &RefCell<SchemaGenerator>) -> Result<SchemaObject, GenerateError> {
132 Ok(generate_number_schema::<u64>())
135 }
136}
137
138impl Configurable for Option<serde_with::DurationMilliSeconds<u64, serde_with::formats::Strict>> {
139 fn generate_schema(generator: &RefCell<SchemaGenerator>) -> Result<SchemaObject, GenerateError>
140 where
141 Self: Sized,
142 {
143 generate_optional_schema(&u64::as_configurable_ref(), generator)
144 }
145}