nominal_api/proto/
nominal.data_connector.v1.rs

1// This file is @generated by prost-build.
2/// Authentication configuration for OPC-UA server connection
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct OpcAuthenticationConfig {
5    /// Authentication configuration for OPC-UA server connection
6    #[prost(
7        oneof = "opc_authentication_config::OpcAuthenticationConfig",
8        tags = "1, 2, 3"
9    )]
10    pub opc_authentication_config: ::core::option::Option<
11        opc_authentication_config::OpcAuthenticationConfig,
12    >,
13}
14/// Nested message and enum types in `OpcAuthenticationConfig`.
15pub mod opc_authentication_config {
16    /// Authentication configuration for OPC-UA server connection
17    #[derive(Clone, PartialEq, ::prost::Oneof)]
18    pub enum OpcAuthenticationConfig {
19        #[prost(message, tag = "1")]
20        Anonymous(super::super::super::super::google::protobuf::Empty),
21        #[prost(message, tag = "2")]
22        UsernamePassword(super::OpcUsernamePasswordAuthentication),
23        #[prost(message, tag = "3")]
24        Token(super::OpcTokenAuthentication),
25    }
26}
27/// Authentication configuration for OPC-UA server connection with secrets
28#[derive(Clone, PartialEq, ::prost::Message)]
29pub struct OpcAuthenticationConfigSecret {
30    #[prost(
31        oneof = "opc_authentication_config_secret::OpcAuthenticationConfig",
32        tags = "1, 2, 3"
33    )]
34    pub opc_authentication_config: ::core::option::Option<
35        opc_authentication_config_secret::OpcAuthenticationConfig,
36    >,
37}
38/// Nested message and enum types in `OpcAuthenticationConfigSecret`.
39pub mod opc_authentication_config_secret {
40    #[derive(Clone, PartialEq, ::prost::Oneof)]
41    pub enum OpcAuthenticationConfig {
42        #[prost(message, tag = "1")]
43        Anonymous(super::super::super::super::google::protobuf::Empty),
44        #[prost(message, tag = "2")]
45        UsernamePassword(super::OpcUsernamePasswordAuthenticationSecret),
46        #[prost(message, tag = "3")]
47        Token(super::OpcTokenAuthenticationSecret),
48    }
49}
50#[derive(Clone, PartialEq, ::prost::Message)]
51pub struct OpcUsernamePasswordAuthentication {
52    #[prost(string, tag = "1")]
53    pub username: ::prost::alloc::string::String,
54    #[prost(string, tag = "2")]
55    pub password: ::prost::alloc::string::String,
56}
57#[derive(Clone, PartialEq, ::prost::Message)]
58pub struct OpcUsernamePasswordAuthenticationSecret {
59    #[prost(string, tag = "1")]
60    pub username: ::prost::alloc::string::String,
61    #[prost(string, tag = "2")]
62    pub password: ::prost::alloc::string::String,
63}
64#[derive(Clone, PartialEq, ::prost::Message)]
65pub struct OpcTokenAuthentication {
66    #[prost(string, tag = "1")]
67    pub token: ::prost::alloc::string::String,
68}
69#[derive(Clone, PartialEq, ::prost::Message)]
70pub struct OpcTokenAuthenticationSecret {
71    #[prost(string, tag = "1")]
72    pub token: ::prost::alloc::string::String,
73}
74/// The identifier field for an OPC-UA node
75#[derive(Clone, PartialEq, ::prost::Message)]
76pub struct OpcIdentifierValue {
77    #[prost(oneof = "opc_identifier_value::OpcIdentifierValue", tags = "1, 2")]
78    pub opc_identifier_value: ::core::option::Option<
79        opc_identifier_value::OpcIdentifierValue,
80    >,
81}
82/// Nested message and enum types in `OpcIdentifierValue`.
83pub mod opc_identifier_value {
84    #[derive(Clone, PartialEq, ::prost::Oneof)]
85    pub enum OpcIdentifierValue {
86        #[prost(int32, tag = "1")]
87        Numeric(i32),
88        #[prost(string, tag = "2")]
89        String(::prost::alloc::string::String),
90    }
91}
92/// An OPC-UA node
93#[derive(Clone, PartialEq, ::prost::Message)]
94pub struct OpcNode {
95    #[prost(uint32, optional, tag = "1")]
96    pub namespace: ::core::option::Option<u32>,
97    #[prost(message, optional, tag = "2")]
98    pub identifier: ::core::option::Option<OpcIdentifierValue>,
99}
100/// How do you want to map the names of OPC-UA nodes to Nominal channels?
101#[derive(Clone, PartialEq, ::prost::Message)]
102pub struct OpcUaChannelNamingConvention {
103    #[prost(
104        oneof = "opc_ua_channel_naming_convention::NamingConvention",
105        tags = "1, 2, 3, 4"
106    )]
107    pub naming_convention: ::core::option::Option<
108        opc_ua_channel_naming_convention::NamingConvention,
109    >,
110}
111/// Nested message and enum types in `OpcUaChannelNamingConvention`.
112pub mod opc_ua_channel_naming_convention {
113    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
114    pub struct OpcUaNodeId {}
115    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
116    pub struct OpcUaBrowseName {}
117    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
118    pub struct OpcUaDisplayName {}
119    /// Configuration for full path naming convention
120    #[derive(Clone, PartialEq, ::prost::Message)]
121    pub struct OpcUaFullPath {
122        /// We will build path up to any of these nodes, or the Objects folder.
123        #[prost(message, repeated, tag = "1")]
124        pub root_nodes: ::prost::alloc::vec::Vec<super::OpcNode>,
125        /// Custom delimiter for path separation. Defaults to "/" if not specified.
126        #[prost(string, tag = "2")]
127        pub delimiter: ::prost::alloc::string::String,
128    }
129    #[derive(Clone, PartialEq, ::prost::Oneof)]
130    pub enum NamingConvention {
131        /// For example, "NodeId{ns=3;i=1010}"
132        #[prost(message, tag = "1")]
133        NodeId(OpcUaNodeId),
134        /// The "name" field under the "BrowseName" attribute
135        #[prost(message, tag = "2")]
136        BrowseName(OpcUaBrowseName),
137        /// The "text" field under the "DisplayName" attribute
138        #[prost(message, tag = "3")]
139        DisplayName(OpcUaDisplayName),
140        /// The full path of the node, separated by a delimiter. Use this setting for creating the hierarchical prefix tree.
141        #[prost(message, tag = "4")]
142        FullPath(OpcUaFullPath),
143    }
144}
145/// Configuration for connecting to an OPC-UA server
146#[derive(Clone, PartialEq, ::prost::Message)]
147pub struct OpcUaConnectorDetails {
148    #[prost(string, tag = "1")]
149    pub uri: ::prost::alloc::string::String,
150    #[prost(message, optional, tag = "2")]
151    pub authentication_config: ::core::option::Option<OpcAuthenticationConfig>,
152    #[prost(message, optional, tag = "3")]
153    pub scraping_config: ::core::option::Option<OpcUaScrapingConfig>,
154}
155/// Updated configuration for connecting to an OPC-UA server
156#[derive(Clone, PartialEq, ::prost::Message)]
157pub struct OpcUaConnectorDetailsUpdates {
158    #[prost(string, optional, tag = "1")]
159    pub uri: ::core::option::Option<::prost::alloc::string::String>,
160    #[prost(message, optional, tag = "2")]
161    pub authentication_config: ::core::option::Option<OpcAuthenticationConfig>,
162    #[prost(message, optional, tag = "3")]
163    pub scraping_config: ::core::option::Option<OpcUaScrapingConfigUpdates>,
164}
165/// Configuration for connecting to an OPC-UA server with secrets
166#[derive(Clone, PartialEq, ::prost::Message)]
167pub struct OpcUaConnectorDetailsSecret {
168    #[prost(string, tag = "1")]
169    pub uri: ::prost::alloc::string::String,
170    #[prost(message, optional, tag = "2")]
171    pub authentication_config: ::core::option::Option<OpcAuthenticationConfigSecret>,
172    #[prost(message, optional, tag = "3")]
173    pub scraping_config: ::core::option::Option<OpcUaScrapingConfig>,
174}
175#[derive(Clone, PartialEq, ::prost::Message)]
176pub struct OpcUaTraversalConfig {
177    /// Root nodes to subscribe to. For each node specified here, we will
178    /// subscribe to that node and all of its children.
179    #[prost(message, repeated, tag = "1")]
180    pub root_nodes: ::prost::alloc::vec::Vec<OpcNode>,
181    /// We will not subscribe to any of these nodes.
182    #[prost(message, repeated, tag = "2")]
183    pub skip_nodes: ::prost::alloc::vec::Vec<OpcNode>,
184    /// The type of references that we will follow when traversing the root nodes in the OPC UA server.
185    #[prost(enumeration = "OpcUaReferenceExplorationType", tag = "3")]
186    pub reference_exploration_type: i32,
187}
188#[derive(Clone, PartialEq, ::prost::Message)]
189pub struct OpcUaDirectNodeSubscription {
190    #[prost(message, repeated, tag = "1")]
191    pub nodes: ::prost::alloc::vec::Vec<OpcNode>,
192}
193#[derive(Clone, PartialEq, ::prost::Message)]
194pub struct OpcUaNodeExplorationConfig {
195    #[prost(
196        oneof = "opc_ua_node_exploration_config::OpcUaNodeExplorationConfig",
197        tags = "1, 2"
198    )]
199    pub opc_ua_node_exploration_config: ::core::option::Option<
200        opc_ua_node_exploration_config::OpcUaNodeExplorationConfig,
201    >,
202}
203/// Nested message and enum types in `OpcUaNodeExplorationConfig`.
204pub mod opc_ua_node_exploration_config {
205    #[derive(Clone, PartialEq, ::prost::Oneof)]
206    pub enum OpcUaNodeExplorationConfig {
207        #[prost(message, tag = "1")]
208        OpcUaTraversalConfig(super::OpcUaTraversalConfig),
209        #[prost(message, tag = "2")]
210        OpcUaDirectNodeSubscription(super::OpcUaDirectNodeSubscription),
211    }
212}
213#[derive(Clone, Copy, PartialEq, ::prost::Message)]
214pub struct OpcUaTimestampHandling {
215    #[prost(oneof = "opc_ua_timestamp_handling::TimestampType", tags = "1, 2, 3")]
216    pub timestamp_type: ::core::option::Option<opc_ua_timestamp_handling::TimestampType>,
217}
218/// Nested message and enum types in `OpcUaTimestampHandling`.
219pub mod opc_ua_timestamp_handling {
220    /// Use the server timestamp <https://reference.opcfoundation.org/Core/Part4/v104/docs/7.7.4>
221    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
222    pub struct OpcUaServerTime {}
223    /// Use the source timestamp <https://reference.opcfoundation.org/Core/Part4/v104/docs/7.7.3>
224    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
225    pub struct OpcUaSourceTime {}
226    /// Use the server timestamp, but add an optional offset. By default, the offset will be the time now.
227    /// This is useful for when the server starts at an epoch time of 0.
228    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
229    pub struct OpcUaRelativeTimestamp {
230        #[prost(message, optional, tag = "1")]
231        pub offset: ::core::option::Option<
232            super::super::super::super::google::protobuf::Timestamp,
233        >,
234    }
235    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
236    pub enum TimestampType {
237        #[prost(message, tag = "1")]
238        Server(OpcUaServerTime),
239        #[prost(message, tag = "2")]
240        Source(OpcUaSourceTime),
241        #[prost(message, tag = "3")]
242        Relative(OpcUaRelativeTimestamp),
243    }
244}
245#[derive(Clone, Copy, PartialEq, ::prost::Message)]
246pub struct OpcUaDataChangeFilter {
247    /// The trigger for the data change filter.
248    #[prost(enumeration = "OpcUaDataChangeTrigger", tag = "1")]
249    pub trigger: i32,
250    #[prost(enumeration = "OpcUaDeadbandType", tag = "2")]
251    pub deadband_type: i32,
252    #[prost(double, tag = "3")]
253    pub deadband_value: f64,
254}
255/// Configuration for determining how data is discovered and handled
256#[derive(Clone, PartialEq, ::prost::Message)]
257pub struct OpcUaScrapingConfig {
258    #[prost(message, optional, tag = "1")]
259    pub node_exploration_config: ::core::option::Option<OpcUaNodeExplorationConfig>,
260    /// The browse name of the node under which the unit is stored for the nodes we scrape.
261    #[prost(string, tag = "2")]
262    pub unit_node_name: ::prost::alloc::string::String,
263    #[prost(message, optional, tag = "3")]
264    pub channel_naming_convention: ::core::option::Option<OpcUaChannelNamingConvention>,
265    /// If true, we will override the host and port of the OPC UA server with the host and port of the original server URL.
266    #[prost(bool, tag = "4")]
267    pub override_host: bool,
268    /// How we will handle unknown data types when we read them from the server
269    #[prost(enumeration = "OpcUaUnknownDataTypeHandling", tag = "5")]
270    pub unknown_data_type_handling: i32,
271    /// How to handle situations where there are failed monitors.
272    #[prost(enumeration = "OpcUaFailedMonitorHandling", tag = "6")]
273    pub failed_monitor_handling: i32,
274    /// What timestamps should we write for the channels?
275    #[prost(message, optional, tag = "7")]
276    pub timestamp_handling: ::core::option::Option<OpcUaTimestampHandling>,
277    /// The data change filter to be applied for the monitored items in the subscription.
278    #[prost(message, optional, tag = "8")]
279    pub data_change_filter: ::core::option::Option<OpcUaDataChangeFilter>,
280}
281/// Updated configuration for determining how data is discovered and handled
282#[derive(Clone, PartialEq, ::prost::Message)]
283pub struct OpcUaScrapingConfigUpdates {
284    #[prost(message, optional, tag = "1")]
285    pub node_exploration_config: ::core::option::Option<OpcUaNodeExplorationConfig>,
286    /// The browse name of the node under which the unit is stored for the nodes we scrape.
287    #[prost(string, optional, tag = "2")]
288    pub unit_node_name: ::core::option::Option<::prost::alloc::string::String>,
289    #[prost(message, optional, tag = "3")]
290    pub channel_naming_convention: ::core::option::Option<OpcUaChannelNamingConvention>,
291    /// If true, we will override the host and port of the OPC UA server with the host and port of the original server URL.
292    #[prost(bool, optional, tag = "4")]
293    pub override_host: ::core::option::Option<bool>,
294    /// How we will handle unknown data types when we read them from the server
295    #[prost(enumeration = "OpcUaUnknownDataTypeHandling", optional, tag = "5")]
296    pub unknown_data_type_handling: ::core::option::Option<i32>,
297    /// How to handle situations where there are failed monitors.
298    #[prost(enumeration = "OpcUaFailedMonitorHandling", optional, tag = "6")]
299    pub failed_monitor_handling: ::core::option::Option<i32>,
300    /// What timestamps should we write for the channels?
301    #[prost(message, optional, tag = "7")]
302    pub timestamp_handling: ::core::option::Option<OpcUaTimestampHandling>,
303    /// The data change filter to be applied for the monitored items in the subscription.
304    #[prost(message, optional, tag = "8")]
305    pub data_change_filter: ::core::option::Option<OpcUaDataChangeFilter>,
306}
307#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
308#[repr(i32)]
309pub enum OpcUaReferenceExplorationType {
310    Unspecified = 0,
311    Organizes = 1,
312    HierarchicalReferences = 2,
313}
314impl OpcUaReferenceExplorationType {
315    /// String value of the enum field names used in the ProtoBuf definition.
316    ///
317    /// The values are not transformed in any way and thus are considered stable
318    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
319    pub fn as_str_name(&self) -> &'static str {
320        match self {
321            Self::Unspecified => "OPC_UA_REFERENCE_EXPLORATION_TYPE_UNSPECIFIED",
322            Self::Organizes => "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES",
323            Self::HierarchicalReferences => {
324                "OPC_UA_REFERENCE_EXPLORATION_TYPE_HIERARCHICAL_REFERENCES"
325            }
326        }
327    }
328    /// Creates an enum from field names used in the ProtoBuf definition.
329    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
330        match value {
331            "OPC_UA_REFERENCE_EXPLORATION_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
332            "OPC_UA_REFERENCE_EXPLORATION_TYPE_ORGANIZES" => Some(Self::Organizes),
333            "OPC_UA_REFERENCE_EXPLORATION_TYPE_HIERARCHICAL_REFERENCES" => {
334                Some(Self::HierarchicalReferences)
335            }
336            _ => None,
337        }
338    }
339}
340#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
341#[repr(i32)]
342pub enum OpcUaUnknownDataTypeHandling {
343    Unspecified = 0,
344    /// If we encounter an unknown data type, we will error out
345    Error = 1,
346    /// If we encounter an unknown data type, we will assume it is a double
347    TreatAsDouble = 2,
348    /// If we encounter an unknown data type, we will assume it is a string
349    TreatAsString = 3,
350}
351impl OpcUaUnknownDataTypeHandling {
352    /// String value of the enum field names used in the ProtoBuf definition.
353    ///
354    /// The values are not transformed in any way and thus are considered stable
355    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
356    pub fn as_str_name(&self) -> &'static str {
357        match self {
358            Self::Unspecified => "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_UNSPECIFIED",
359            Self::Error => "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR",
360            Self::TreatAsDouble => "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_TREAT_AS_DOUBLE",
361            Self::TreatAsString => "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_TREAT_AS_STRING",
362        }
363    }
364    /// Creates an enum from field names used in the ProtoBuf definition.
365    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
366        match value {
367            "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_UNSPECIFIED" => Some(Self::Unspecified),
368            "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_ERROR" => Some(Self::Error),
369            "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_TREAT_AS_DOUBLE" => {
370                Some(Self::TreatAsDouble)
371            }
372            "OPC_UA_UNKNOWN_DATA_TYPE_HANDLING_TREAT_AS_STRING" => {
373                Some(Self::TreatAsString)
374            }
375            _ => None,
376        }
377    }
378}
379#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
380#[repr(i32)]
381pub enum OpcUaFailedMonitorHandling {
382    Unspecified = 0,
383    Error = 1,
384    Ignore = 2,
385}
386impl OpcUaFailedMonitorHandling {
387    /// String value of the enum field names used in the ProtoBuf definition.
388    ///
389    /// The values are not transformed in any way and thus are considered stable
390    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
391    pub fn as_str_name(&self) -> &'static str {
392        match self {
393            Self::Unspecified => "OPC_UA_FAILED_MONITOR_HANDLING_UNSPECIFIED",
394            Self::Error => "OPC_UA_FAILED_MONITOR_HANDLING_ERROR",
395            Self::Ignore => "OPC_UA_FAILED_MONITOR_HANDLING_IGNORE",
396        }
397    }
398    /// Creates an enum from field names used in the ProtoBuf definition.
399    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
400        match value {
401            "OPC_UA_FAILED_MONITOR_HANDLING_UNSPECIFIED" => Some(Self::Unspecified),
402            "OPC_UA_FAILED_MONITOR_HANDLING_ERROR" => Some(Self::Error),
403            "OPC_UA_FAILED_MONITOR_HANDLING_IGNORE" => Some(Self::Ignore),
404            _ => None,
405        }
406    }
407}
408#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
409#[repr(i32)]
410pub enum OpcUaDataChangeTrigger {
411    Unspecified = 0,
412    StatusOnly = 1,
413    StatusValue = 2,
414    StatusValueTimestamp = 3,
415}
416impl OpcUaDataChangeTrigger {
417    /// String value of the enum field names used in the ProtoBuf definition.
418    ///
419    /// The values are not transformed in any way and thus are considered stable
420    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
421    pub fn as_str_name(&self) -> &'static str {
422        match self {
423            Self::Unspecified => "OPC_UA_DATA_CHANGE_TRIGGER_UNSPECIFIED",
424            Self::StatusOnly => "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY",
425            Self::StatusValue => "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_VALUE",
426            Self::StatusValueTimestamp => {
427                "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_VALUE_TIMESTAMP"
428            }
429        }
430    }
431    /// Creates an enum from field names used in the ProtoBuf definition.
432    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
433        match value {
434            "OPC_UA_DATA_CHANGE_TRIGGER_UNSPECIFIED" => Some(Self::Unspecified),
435            "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_ONLY" => Some(Self::StatusOnly),
436            "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_VALUE" => Some(Self::StatusValue),
437            "OPC_UA_DATA_CHANGE_TRIGGER_STATUS_VALUE_TIMESTAMP" => {
438                Some(Self::StatusValueTimestamp)
439            }
440            _ => None,
441        }
442    }
443}
444#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
445#[repr(i32)]
446pub enum OpcUaDeadbandType {
447    Unspecified = 0,
448    None = 1,
449    Absolute = 2,
450    Percent = 3,
451}
452impl OpcUaDeadbandType {
453    /// String value of the enum field names used in the ProtoBuf definition.
454    ///
455    /// The values are not transformed in any way and thus are considered stable
456    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
457    pub fn as_str_name(&self) -> &'static str {
458        match self {
459            Self::Unspecified => "OPC_UA_DEADBAND_TYPE_UNSPECIFIED",
460            Self::None => "OPC_UA_DEADBAND_TYPE_NONE",
461            Self::Absolute => "OPC_UA_DEADBAND_TYPE_ABSOLUTE",
462            Self::Percent => "OPC_UA_DEADBAND_TYPE_PERCENT",
463        }
464    }
465    /// Creates an enum from field names used in the ProtoBuf definition.
466    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
467        match value {
468            "OPC_UA_DEADBAND_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
469            "OPC_UA_DEADBAND_TYPE_NONE" => Some(Self::None),
470            "OPC_UA_DEADBAND_TYPE_ABSOLUTE" => Some(Self::Absolute),
471            "OPC_UA_DEADBAND_TYPE_PERCENT" => Some(Self::Percent),
472            _ => None,
473        }
474    }
475}
476/// Request to create a new data connector
477#[derive(Clone, PartialEq, ::prost::Message)]
478pub struct CreateDataConnectorRequest {
479    #[prost(string, tag = "1")]
480    pub name: ::prost::alloc::string::String,
481    #[prost(string, tag = "2")]
482    pub description: ::prost::alloc::string::String,
483    #[prost(message, optional, tag = "3")]
484    pub connection_details: ::core::option::Option<DataConnectorDetails>,
485    #[prost(string, tag = "4")]
486    pub workspace_rid: ::prost::alloc::string::String,
487    #[prost(string, tag = "5")]
488    pub target_dataset_rid: ::prost::alloc::string::String,
489}
490/// Response for creating a new data connector
491#[derive(Clone, PartialEq, ::prost::Message)]
492pub struct CreateDataConnectorResponse {
493    #[prost(message, optional, tag = "1")]
494    pub data_connector: ::core::option::Option<DataConnector>,
495}
496/// A configured data connector
497#[derive(Clone, PartialEq, ::prost::Message)]
498pub struct DataConnector {
499    #[prost(string, tag = "1")]
500    pub data_connector_rid: ::prost::alloc::string::String,
501    #[prost(string, tag = "2")]
502    pub name: ::prost::alloc::string::String,
503    #[prost(string, tag = "3")]
504    pub description: ::prost::alloc::string::String,
505    #[prost(message, optional, tag = "4")]
506    pub connection_details: ::core::option::Option<DataConnectorDetailsSecrets>,
507    #[prost(string, tag = "5")]
508    pub workspace_rid: ::prost::alloc::string::String,
509    #[prost(string, tag = "6")]
510    pub target_dataset_rid: ::prost::alloc::string::String,
511    #[prost(message, optional, tag = "7")]
512    pub created_at: ::core::option::Option<
513        super::super::super::google::protobuf::Timestamp,
514    >,
515}
516/// Union type for different data connector types
517#[derive(Clone, PartialEq, ::prost::Message)]
518pub struct DataConnectorDetails {
519    #[prost(oneof = "data_connector_details::DataConnectorDetails", tags = "1")]
520    pub data_connector_details: ::core::option::Option<
521        data_connector_details::DataConnectorDetails,
522    >,
523}
524/// Nested message and enum types in `DataConnectorDetails`.
525pub mod data_connector_details {
526    #[derive(Clone, PartialEq, ::prost::Oneof)]
527    pub enum DataConnectorDetails {
528        #[prost(message, tag = "1")]
529        OpcUa(super::OpcUaConnectorDetails),
530    }
531}
532#[derive(Clone, PartialEq, ::prost::Message)]
533pub struct DataConnectorDetailsUpdates {
534    #[prost(
535        oneof = "data_connector_details_updates::DataConnectorDetailsUpdates",
536        tags = "1"
537    )]
538    pub data_connector_details_updates: ::core::option::Option<
539        data_connector_details_updates::DataConnectorDetailsUpdates,
540    >,
541}
542/// Nested message and enum types in `DataConnectorDetailsUpdates`.
543pub mod data_connector_details_updates {
544    #[derive(Clone, PartialEq, ::prost::Oneof)]
545    pub enum DataConnectorDetailsUpdates {
546        #[prost(message, tag = "1")]
547        OpcUa(super::OpcUaConnectorDetailsUpdates),
548    }
549}
550/// Union type for different data connector types with secrets
551#[derive(Clone, PartialEq, ::prost::Message)]
552pub struct DataConnectorDetailsSecrets {
553    #[prost(oneof = "data_connector_details_secrets::DataConnectorDetails", tags = "1")]
554    pub data_connector_details: ::core::option::Option<
555        data_connector_details_secrets::DataConnectorDetails,
556    >,
557}
558/// Nested message and enum types in `DataConnectorDetailsSecrets`.
559pub mod data_connector_details_secrets {
560    #[derive(Clone, PartialEq, ::prost::Oneof)]
561    pub enum DataConnectorDetails {
562        #[prost(message, tag = "1")]
563        OpcUa(super::OpcUaConnectorDetailsSecret),
564    }
565}
566#[derive(Clone, PartialEq, ::prost::Message)]
567pub struct UpdateDataConnectorRequest {
568    #[prost(string, tag = "1")]
569    pub data_connector_rid: ::prost::alloc::string::String,
570    #[prost(string, optional, tag = "2")]
571    pub name: ::core::option::Option<::prost::alloc::string::String>,
572    #[prost(string, optional, tag = "3")]
573    pub description: ::core::option::Option<::prost::alloc::string::String>,
574    #[prost(message, optional, tag = "4")]
575    pub connection_details: ::core::option::Option<DataConnectorDetailsUpdates>,
576    #[prost(string, optional, tag = "5")]
577    pub target_dataset_rid: ::core::option::Option<::prost::alloc::string::String>,
578}
579#[derive(Clone, PartialEq, ::prost::Message)]
580pub struct UpdateDataConnectorResponse {
581    #[prost(message, optional, tag = "1")]
582    pub data_connector: ::core::option::Option<DataConnector>,
583}
584#[derive(Clone, PartialEq, ::prost::Message)]
585pub struct GetDataConnectorRequest {
586    #[prost(string, tag = "1")]
587    pub data_connector_rid: ::prost::alloc::string::String,
588}
589#[derive(Clone, PartialEq, ::prost::Message)]
590pub struct GetDataConnectorResponse {
591    #[prost(message, optional, tag = "1")]
592    pub data_connector: ::core::option::Option<DataConnector>,
593}
594#[derive(Clone, PartialEq, ::prost::Message)]
595pub struct NameFilter {
596    #[prost(string, tag = "1")]
597    pub name: ::prost::alloc::string::String,
598}
599#[derive(Clone, PartialEq, ::prost::Message)]
600pub struct DescriptionFilter {
601    #[prost(string, tag = "1")]
602    pub description: ::prost::alloc::string::String,
603}
604#[derive(Clone, PartialEq, ::prost::Message)]
605pub struct TargetDatasetFilter {
606    #[prost(string, tag = "1")]
607    pub target_dataset_rid: ::prost::alloc::string::String,
608}
609#[derive(Clone, Copy, PartialEq, ::prost::Message)]
610pub struct ReplicaStatusFilter {
611    #[prost(enumeration = "ReplicaStatus", tag = "1")]
612    pub replica_status: i32,
613}
614#[derive(Clone, PartialEq, ::prost::Message)]
615pub struct SearchFilter {
616    #[prost(oneof = "search_filter::Filter", tags = "1, 2, 3, 4")]
617    pub filter: ::core::option::Option<search_filter::Filter>,
618}
619/// Nested message and enum types in `SearchFilter`.
620pub mod search_filter {
621    #[derive(Clone, PartialEq, ::prost::Oneof)]
622    pub enum Filter {
623        #[prost(message, tag = "1")]
624        Name(super::NameFilter),
625        #[prost(message, tag = "2")]
626        Description(super::DescriptionFilter),
627        #[prost(message, tag = "3")]
628        TargetDataset(super::TargetDatasetFilter),
629        #[prost(message, tag = "4")]
630        ReplicaStatus(super::ReplicaStatusFilter),
631    }
632}
633#[derive(Clone, PartialEq, ::prost::Message)]
634pub struct SearchRequest {
635    #[prost(string, tag = "1")]
636    pub workspace_rid: ::prost::alloc::string::String,
637    #[prost(message, optional, tag = "2")]
638    pub filter: ::core::option::Option<SearchFilter>,
639    #[prost(int32, tag = "3")]
640    pub page_size: i32,
641    #[prost(string, optional, tag = "4")]
642    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
643}
644#[derive(Clone, PartialEq, ::prost::Message)]
645pub struct SearchResponse {
646    #[prost(message, repeated, tag = "1")]
647    pub data_connectors: ::prost::alloc::vec::Vec<DataConnector>,
648    #[prost(string, optional, tag = "2")]
649    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
650}
651#[derive(Clone, PartialEq, ::prost::Message)]
652pub struct StartSessionRequest {
653    #[prost(string, tag = "1")]
654    pub data_connector_rid: ::prost::alloc::string::String,
655}
656#[derive(Clone, Copy, PartialEq, ::prost::Message)]
657pub struct StartSessionResponse {}
658#[derive(Clone, PartialEq, ::prost::Message)]
659pub struct StopSessionRequest {
660    #[prost(string, tag = "1")]
661    pub data_connector_rid: ::prost::alloc::string::String,
662}
663#[derive(Clone, Copy, PartialEq, ::prost::Message)]
664pub struct StopSessionResponse {}
665#[derive(Clone, PartialEq, ::prost::Message)]
666pub struct GetSessionStatusRequest {
667    #[prost(string, tag = "1")]
668    pub data_connector_rid: ::prost::alloc::string::String,
669}
670#[derive(Clone, PartialEq, ::prost::Message)]
671pub struct ActiveSessionStatus {
672    #[prost(enumeration = "ReplicaStatus", repeated, tag = "1")]
673    pub replica_status: ::prost::alloc::vec::Vec<i32>,
674}
675#[derive(Clone, PartialEq, ::prost::Message)]
676pub struct GetSessionStatusResponse {
677    #[prost(oneof = "get_session_status_response::Status", tags = "1, 2")]
678    pub status: ::core::option::Option<get_session_status_response::Status>,
679}
680/// Nested message and enum types in `GetSessionStatusResponse`.
681pub mod get_session_status_response {
682    #[derive(Clone, PartialEq, ::prost::Oneof)]
683    pub enum Status {
684        #[prost(message, tag = "1")]
685        None(super::super::super::super::google::protobuf::Empty),
686        #[prost(message, tag = "2")]
687        Active(super::ActiveSessionStatus),
688    }
689}
690/// Error types for data connector operations
691#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
692#[repr(i32)]
693pub enum DataConnectorErrorType {
694    Unspecified = 0,
695    ConnectorNotFound = 1,
696}
697impl DataConnectorErrorType {
698    /// String value of the enum field names used in the ProtoBuf definition.
699    ///
700    /// The values are not transformed in any way and thus are considered stable
701    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
702    pub fn as_str_name(&self) -> &'static str {
703        match self {
704            Self::Unspecified => "DATA_CONNECTOR_ERROR_TYPE_UNSPECIFIED",
705            Self::ConnectorNotFound => "DATA_CONNECTOR_ERROR_TYPE_CONNECTOR_NOT_FOUND",
706        }
707    }
708    /// Creates an enum from field names used in the ProtoBuf definition.
709    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
710        match value {
711            "DATA_CONNECTOR_ERROR_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
712            "DATA_CONNECTOR_ERROR_TYPE_CONNECTOR_NOT_FOUND" => {
713                Some(Self::ConnectorNotFound)
714            }
715            _ => None,
716        }
717    }
718}
719#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
720#[repr(i32)]
721pub enum ReplicaStatus {
722    Unspecified = 0,
723    Starting = 1,
724    Subscribing = 2,
725    Running = 3,
726    Stopping = 4,
727    Stopped = 5,
728}
729impl ReplicaStatus {
730    /// String value of the enum field names used in the ProtoBuf definition.
731    ///
732    /// The values are not transformed in any way and thus are considered stable
733    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
734    pub fn as_str_name(&self) -> &'static str {
735        match self {
736            Self::Unspecified => "REPLICA_STATUS_UNSPECIFIED",
737            Self::Starting => "REPLICA_STATUS_STARTING",
738            Self::Subscribing => "REPLICA_STATUS_SUBSCRIBING",
739            Self::Running => "REPLICA_STATUS_RUNNING",
740            Self::Stopping => "REPLICA_STATUS_STOPPING",
741            Self::Stopped => "REPLICA_STATUS_STOPPED",
742        }
743    }
744    /// Creates an enum from field names used in the ProtoBuf definition.
745    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
746        match value {
747            "REPLICA_STATUS_UNSPECIFIED" => Some(Self::Unspecified),
748            "REPLICA_STATUS_STARTING" => Some(Self::Starting),
749            "REPLICA_STATUS_SUBSCRIBING" => Some(Self::Subscribing),
750            "REPLICA_STATUS_RUNNING" => Some(Self::Running),
751            "REPLICA_STATUS_STOPPING" => Some(Self::Stopping),
752            "REPLICA_STATUS_STOPPED" => Some(Self::Stopped),
753            _ => None,
754        }
755    }
756}
757/// Generated client implementations.
758pub mod data_connector_service_client {
759    #![allow(
760        unused_variables,
761        dead_code,
762        missing_docs,
763        clippy::wildcard_imports,
764        clippy::let_unit_value,
765    )]
766    use tonic::codegen::*;
767    use tonic::codegen::http::Uri;
768    /// Service for managing data connectors to external data sources.
769    /// Supports OPC-UA with plans for MQTT, Kafka, and other protocols.
770    #[derive(Debug, Clone)]
771    pub struct DataConnectorServiceClient<T> {
772        inner: tonic::client::Grpc<T>,
773    }
774    impl DataConnectorServiceClient<tonic::transport::Channel> {
775        /// Attempt to create a new client by connecting to a given endpoint.
776        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
777        where
778            D: TryInto<tonic::transport::Endpoint>,
779            D::Error: Into<StdError>,
780        {
781            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
782            Ok(Self::new(conn))
783        }
784    }
785    impl<T> DataConnectorServiceClient<T>
786    where
787        T: tonic::client::GrpcService<tonic::body::Body>,
788        T::Error: Into<StdError>,
789        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
790        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
791    {
792        pub fn new(inner: T) -> Self {
793            let inner = tonic::client::Grpc::new(inner);
794            Self { inner }
795        }
796        pub fn with_origin(inner: T, origin: Uri) -> Self {
797            let inner = tonic::client::Grpc::with_origin(inner, origin);
798            Self { inner }
799        }
800        pub fn with_interceptor<F>(
801            inner: T,
802            interceptor: F,
803        ) -> DataConnectorServiceClient<InterceptedService<T, F>>
804        where
805            F: tonic::service::Interceptor,
806            T::ResponseBody: Default,
807            T: tonic::codegen::Service<
808                http::Request<tonic::body::Body>,
809                Response = http::Response<
810                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
811                >,
812            >,
813            <T as tonic::codegen::Service<
814                http::Request<tonic::body::Body>,
815            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
816        {
817            DataConnectorServiceClient::new(InterceptedService::new(inner, interceptor))
818        }
819        /// Compress requests with the given encoding.
820        ///
821        /// This requires the server to support it otherwise it might respond with an
822        /// error.
823        #[must_use]
824        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
825            self.inner = self.inner.send_compressed(encoding);
826            self
827        }
828        /// Enable decompressing responses.
829        #[must_use]
830        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
831            self.inner = self.inner.accept_compressed(encoding);
832            self
833        }
834        /// Limits the maximum size of a decoded message.
835        ///
836        /// Default: `4MB`
837        #[must_use]
838        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
839            self.inner = self.inner.max_decoding_message_size(limit);
840            self
841        }
842        /// Limits the maximum size of an encoded message.
843        ///
844        /// Default: `usize::MAX`
845        #[must_use]
846        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
847            self.inner = self.inner.max_encoding_message_size(limit);
848            self
849        }
850        /// Creates a new data connector configuration
851        pub async fn create_data_connector(
852            &mut self,
853            request: impl tonic::IntoRequest<super::CreateDataConnectorRequest>,
854        ) -> std::result::Result<
855            tonic::Response<super::CreateDataConnectorResponse>,
856            tonic::Status,
857        > {
858            self.inner
859                .ready()
860                .await
861                .map_err(|e| {
862                    tonic::Status::unknown(
863                        format!("Service was not ready: {}", e.into()),
864                    )
865                })?;
866            let codec = tonic::codec::ProstCodec::default();
867            let path = http::uri::PathAndQuery::from_static(
868                "/nominal.data_connector.v1.DataConnectorService/CreateDataConnector",
869            );
870            let mut req = request.into_request();
871            req.extensions_mut()
872                .insert(
873                    GrpcMethod::new(
874                        "nominal.data_connector.v1.DataConnectorService",
875                        "CreateDataConnector",
876                    ),
877                );
878            self.inner.unary(req, path, codec).await
879        }
880        /// Gets the settings for a data connector
881        pub async fn get_data_connector(
882            &mut self,
883            request: impl tonic::IntoRequest<super::GetDataConnectorRequest>,
884        ) -> std::result::Result<
885            tonic::Response<super::GetDataConnectorResponse>,
886            tonic::Status,
887        > {
888            self.inner
889                .ready()
890                .await
891                .map_err(|e| {
892                    tonic::Status::unknown(
893                        format!("Service was not ready: {}", e.into()),
894                    )
895                })?;
896            let codec = tonic::codec::ProstCodec::default();
897            let path = http::uri::PathAndQuery::from_static(
898                "/nominal.data_connector.v1.DataConnectorService/GetDataConnector",
899            );
900            let mut req = request.into_request();
901            req.extensions_mut()
902                .insert(
903                    GrpcMethod::new(
904                        "nominal.data_connector.v1.DataConnectorService",
905                        "GetDataConnector",
906                    ),
907                );
908            self.inner.unary(req, path, codec).await
909        }
910        /// Updates the settings for a data connector
911        pub async fn update_data_connector(
912            &mut self,
913            request: impl tonic::IntoRequest<super::UpdateDataConnectorRequest>,
914        ) -> std::result::Result<
915            tonic::Response<super::UpdateDataConnectorResponse>,
916            tonic::Status,
917        > {
918            self.inner
919                .ready()
920                .await
921                .map_err(|e| {
922                    tonic::Status::unknown(
923                        format!("Service was not ready: {}", e.into()),
924                    )
925                })?;
926            let codec = tonic::codec::ProstCodec::default();
927            let path = http::uri::PathAndQuery::from_static(
928                "/nominal.data_connector.v1.DataConnectorService/UpdateDataConnector",
929            );
930            let mut req = request.into_request();
931            req.extensions_mut()
932                .insert(
933                    GrpcMethod::new(
934                        "nominal.data_connector.v1.DataConnectorService",
935                        "UpdateDataConnector",
936                    ),
937                );
938            self.inner.unary(req, path, codec).await
939        }
940        /// List the data connectors matching the search criteria
941        pub async fn search(
942            &mut self,
943            request: impl tonic::IntoRequest<super::SearchRequest>,
944        ) -> std::result::Result<tonic::Response<super::SearchResponse>, tonic::Status> {
945            self.inner
946                .ready()
947                .await
948                .map_err(|e| {
949                    tonic::Status::unknown(
950                        format!("Service was not ready: {}", e.into()),
951                    )
952                })?;
953            let codec = tonic::codec::ProstCodec::default();
954            let path = http::uri::PathAndQuery::from_static(
955                "/nominal.data_connector.v1.DataConnectorService/Search",
956            );
957            let mut req = request.into_request();
958            req.extensions_mut()
959                .insert(
960                    GrpcMethod::new(
961                        "nominal.data_connector.v1.DataConnectorService",
962                        "Search",
963                    ),
964                );
965            self.inner.unary(req, path, codec).await
966        }
967        /// Starts a session for a connection
968        pub async fn start_session(
969            &mut self,
970            request: impl tonic::IntoRequest<super::StartSessionRequest>,
971        ) -> std::result::Result<
972            tonic::Response<super::StartSessionResponse>,
973            tonic::Status,
974        > {
975            self.inner
976                .ready()
977                .await
978                .map_err(|e| {
979                    tonic::Status::unknown(
980                        format!("Service was not ready: {}", e.into()),
981                    )
982                })?;
983            let codec = tonic::codec::ProstCodec::default();
984            let path = http::uri::PathAndQuery::from_static(
985                "/nominal.data_connector.v1.DataConnectorService/StartSession",
986            );
987            let mut req = request.into_request();
988            req.extensions_mut()
989                .insert(
990                    GrpcMethod::new(
991                        "nominal.data_connector.v1.DataConnectorService",
992                        "StartSession",
993                    ),
994                );
995            self.inner.unary(req, path, codec).await
996        }
997        /// Stops a session for a connection
998        pub async fn stop_session(
999            &mut self,
1000            request: impl tonic::IntoRequest<super::StopSessionRequest>,
1001        ) -> std::result::Result<
1002            tonic::Response<super::StopSessionResponse>,
1003            tonic::Status,
1004        > {
1005            self.inner
1006                .ready()
1007                .await
1008                .map_err(|e| {
1009                    tonic::Status::unknown(
1010                        format!("Service was not ready: {}", e.into()),
1011                    )
1012                })?;
1013            let codec = tonic::codec::ProstCodec::default();
1014            let path = http::uri::PathAndQuery::from_static(
1015                "/nominal.data_connector.v1.DataConnectorService/StopSession",
1016            );
1017            let mut req = request.into_request();
1018            req.extensions_mut()
1019                .insert(
1020                    GrpcMethod::new(
1021                        "nominal.data_connector.v1.DataConnectorService",
1022                        "StopSession",
1023                    ),
1024                );
1025            self.inner.unary(req, path, codec).await
1026        }
1027        /// Gets the session status for a connection
1028        pub async fn get_session_status(
1029            &mut self,
1030            request: impl tonic::IntoRequest<super::GetSessionStatusRequest>,
1031        ) -> std::result::Result<
1032            tonic::Response<super::GetSessionStatusResponse>,
1033            tonic::Status,
1034        > {
1035            self.inner
1036                .ready()
1037                .await
1038                .map_err(|e| {
1039                    tonic::Status::unknown(
1040                        format!("Service was not ready: {}", e.into()),
1041                    )
1042                })?;
1043            let codec = tonic::codec::ProstCodec::default();
1044            let path = http::uri::PathAndQuery::from_static(
1045                "/nominal.data_connector.v1.DataConnectorService/GetSessionStatus",
1046            );
1047            let mut req = request.into_request();
1048            req.extensions_mut()
1049                .insert(
1050                    GrpcMethod::new(
1051                        "nominal.data_connector.v1.DataConnectorService",
1052                        "GetSessionStatus",
1053                    ),
1054                );
1055            self.inner.unary(req, path, codec).await
1056        }
1057    }
1058}