vector_api_client/gql/
tap.rs

1#![allow(clippy::upper_case_acronyms)]
2
3use graphql_client::GraphQLQuery;
4
5use crate::BoxedSubscription;
6
7/// Shorthand for a Chrono datetime, set to UTC.
8type DateTime = chrono::DateTime<chrono::Utc>;
9
10/// OutputEventsByComponentIdPatternsSubscription allows observability into the events that are
11/// generated from component(s).
12#[derive(GraphQLQuery, Debug, Copy, Clone)]
13#[graphql(
14    schema_path = "graphql/schema.json",
15    query_path = "graphql/subscriptions/output_events_by_component_id_patterns.graphql",
16    response_derives = "Debug"
17)]
18pub struct OutputEventsByComponentIdPatternsSubscription;
19
20/// Tap encoding format type that is more convenient to use for public clients than the
21/// generated `output_events_by_component_id_patterns_subscription::EventEncodingType`.
22#[derive(clap::ValueEnum, Debug, Clone, Copy)]
23pub enum TapEncodingFormat {
24    Json,
25    Yaml,
26    Logfmt,
27}
28
29/// String -> TapEncodingFormat, typically for parsing user input.
30impl std::str::FromStr for TapEncodingFormat {
31    type Err = String;
32
33    fn from_str(s: &str) -> Result<Self, Self::Err> {
34        match s {
35            "json" => Ok(Self::Json),
36            "yaml" => Ok(Self::Yaml),
37            "logfmt" => Ok(Self::Logfmt),
38            _ => Err("Invalid encoding format".to_string()),
39        }
40    }
41}
42
43/// Map the public-facing `TapEncodingFormat` to the internal `EventEncodingType`.
44impl From<TapEncodingFormat>
45    for output_events_by_component_id_patterns_subscription::EventEncodingType
46{
47    fn from(encoding: TapEncodingFormat) -> Self {
48        match encoding {
49            TapEncodingFormat::Json => Self::JSON,
50            TapEncodingFormat::Yaml => Self::YAML,
51            TapEncodingFormat::Logfmt => Self::LOGFMT,
52        }
53    }
54}
55
56pub trait TapSubscriptionExt {
57    /// Executes an output events subscription.
58    fn output_events_by_component_id_patterns_subscription(
59        &self,
60        outputs_patterns: Vec<String>,
61        inputs_patterns: Vec<String>,
62        encoding: TapEncodingFormat,
63        limit: i64,
64        interval: i64,
65    ) -> crate::BoxedSubscription<OutputEventsByComponentIdPatternsSubscription>;
66}
67
68impl TapSubscriptionExt for crate::SubscriptionClient {
69    /// Executes an output events subscription.
70    fn output_events_by_component_id_patterns_subscription(
71        &self,
72        outputs_patterns: Vec<String>,
73        inputs_patterns: Vec<String>,
74        encoding: TapEncodingFormat,
75        limit: i64,
76        interval: i64,
77    ) -> BoxedSubscription<OutputEventsByComponentIdPatternsSubscription> {
78        let request_body = OutputEventsByComponentIdPatternsSubscription::build_query(
79            output_events_by_component_id_patterns_subscription::Variables {
80                outputs_patterns,
81                inputs_patterns: Some(inputs_patterns),
82                limit,
83                interval,
84                encoding: encoding.into(),
85            },
86        );
87
88        self.start::<OutputEventsByComponentIdPatternsSubscription>(&request_body)
89    }
90}