use std::fmt::Display;
use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Default, Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
#[serde(transparent)]
pub struct Env(pub IndexMap<String, Value>);
impl From<IndexMap<String, Value>> for Env {
fn from(value: IndexMap<String, Value>) -> Self {
Self(value)
}
}
impl Env {
pub fn github() -> Self {
let mut map = IndexMap::new();
map.insert(
"GITHUB_TOKEN".to_string(),
Value::from("${{ secrets.GITHUB_TOKEN }}"),
);
Self(map)
}
pub fn new<K: ToString, V: Into<Value>>(key: K, value: V) -> Self {
Self::default().add(key, value)
}
pub fn add<T1: ToString, T2: Into<Value>>(mut self, key: T1, value: T2) -> Self {
self.0.insert(key.to_string(), value.into());
self
}
}
impl<S1: Display, S2: Display> From<(S1, S2)> for Env {
fn from(value: (S1, S2)) -> Self {
let mut index_map: IndexMap<String, Value> = IndexMap::new();
index_map.insert(value.0.to_string(), Value::String(value.1.to_string()));
Self(index_map)
}
}