Skip to main content

greentic_types/
runtime_config.rs

1//! Runtime-resolved configuration shared across lifecycle and deployment flows.
2
3use alloc::string::String;
4
5#[cfg(feature = "schemars")]
6use schemars::JsonSchema;
7#[cfg(feature = "serde")]
8use serde::{Deserialize, Serialize};
9
10/// Runtime-resolved configuration values exposed to lifecycle tools.
11#[derive(Clone, Debug, Default, PartialEq, Eq)]
12#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13#[cfg_attr(feature = "schemars", derive(JsonSchema))]
14pub struct RuntimeConfig {
15    /// Canonical public base URL currently resolved for the runtime, if any.
16    #[cfg_attr(
17        feature = "serde",
18        serde(default, skip_serializing_if = "Option::is_none")
19    )]
20    pub public_base_url: Option<RuntimePublicBaseUrl>,
21}
22
23/// Canonical runtime public URL plus its resolution source.
24#[derive(Clone, Debug, PartialEq, Eq)]
25#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26#[cfg_attr(feature = "schemars", derive(JsonSchema))]
27pub struct RuntimePublicBaseUrl {
28    /// Resolved public base URL value.
29    pub value: String,
30    /// How the runtime obtained this URL.
31    pub source: RuntimePublicBaseUrlSource,
32}
33
34/// Source of the effective runtime public URL.
35#[derive(Clone, Copy, Debug, PartialEq, Eq)]
36#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
37#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
38#[cfg_attr(feature = "schemars", derive(JsonSchema))]
39pub enum RuntimePublicBaseUrlSource {
40    /// Value came from setup/static configuration.
41    Configured,
42    /// Value came from a runtime tunnel such as cloudflared or ngrok.
43    Tunnel,
44    /// Value was derived at runtime from the local listener.
45    Derived,
46}