alien_bindings/providers/container/
horizon.rs1use crate::error::Result;
6use crate::traits::{Binding, Container};
7use alien_core::bindings::HorizonContainerBinding;
8use async_trait::async_trait;
9
10#[derive(Debug)]
12pub struct HorizonContainer {
13 container_name: String,
14 internal_url: String,
15 public_url: Option<String>,
16}
17
18impl HorizonContainer {
19 pub fn new(binding: HorizonContainerBinding) -> Result<Self> {
21 use crate::error::{binding_env_var, ErrorData};
22 use alien_error::Context;
23
24 let container_name = binding
25 .container_name
26 .into_value("container", "container_name")
27 .context(ErrorData::BindingConfigInvalid {
28 env_var: binding_env_var("container"),
29 binding_name: "container".to_string(),
30 reason: "Failed to resolve container_name from binding".to_string(),
31 })?;
32
33 let internal_url = binding
34 .internal_url
35 .into_value("container", "internal_url")
36 .context(ErrorData::BindingConfigInvalid {
37 env_var: binding_env_var("container"),
38 binding_name: "container".to_string(),
39 reason: "Failed to resolve internal_url from binding".to_string(),
40 })?;
41
42 let public_url = binding
43 .public_url
44 .map(|v| {
45 v.into_value("container", "public_url")
46 .context(ErrorData::BindingConfigInvalid {
47 env_var: binding_env_var("container"),
48 binding_name: "container".to_string(),
49 reason: "Failed to resolve public_url from binding".to_string(),
50 })
51 })
52 .transpose()?;
53
54 Ok(Self {
55 container_name,
56 internal_url,
57 public_url,
58 })
59 }
60}
61
62impl Binding for HorizonContainer {}
63
64#[async_trait]
65impl Container for HorizonContainer {
66 fn get_internal_url(&self) -> &str {
67 &self.internal_url
68 }
69
70 fn get_public_url(&self) -> Option<&str> {
71 self.public_url.as_deref()
72 }
73
74 fn get_container_name(&self) -> &str {
75 &self.container_name
76 }
77
78 fn as_any(&self) -> &dyn std::any::Any {
79 self
80 }
81}