mirror of
https://github.com/Noratrieb/terustform.git
synced 2026-01-14 16:35:11 +01:00
stuff
This commit is contained in:
parent
f3c37539f0
commit
e0f753c0c2
2 changed files with 21 additions and 8 deletions
|
|
@ -4,7 +4,7 @@ use terustform::{
|
|||
framework::{
|
||||
datasource::{self, DataSource},
|
||||
provider::Provider,
|
||||
AttrPath, DResult, Diagnostics, StringValue, ValueModel,
|
||||
AttrPath, DResult, StringValue, ValueModel,
|
||||
},
|
||||
values::Value,
|
||||
};
|
||||
|
|
@ -75,11 +75,8 @@ impl DataSource for ExampleDataSource {
|
|||
fn read(&self, config: Value) -> DResult<Value> {
|
||||
let mut model = ExampleDataSourceModel::from_value(config, &AttrPath::root())?;
|
||||
|
||||
let StringValue::Known(name_str) = &model.name else {
|
||||
return Err(Diagnostics::error_string(
|
||||
"model name must be known".to_owned(),
|
||||
));
|
||||
};
|
||||
let name_str = model.name.expect_known(AttrPath::attr("name"))?;
|
||||
|
||||
let meow = format!("mrrrrr i am {name_str}");
|
||||
|
||||
model.meow = StringValue::Known(meow);
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@ pub struct Diagnostics {
|
|||
pub type DResult<T> = Result<T, Diagnostics>;
|
||||
|
||||
impl Diagnostics {
|
||||
pub fn error_string(msg: String) -> Self {
|
||||
pub fn error_string(msg: impl Into<String>) -> Self {
|
||||
Self {
|
||||
errors: vec![msg],
|
||||
errors: vec![msg.into()],
|
||||
attr: None,
|
||||
}
|
||||
}
|
||||
|
|
@ -56,6 +56,9 @@ impl AttrPath {
|
|||
pub fn root() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
pub fn attr(name: impl Into<String>) -> Self {
|
||||
Self(vec![AttrPathSegment::AttributeName(name.into())])
|
||||
}
|
||||
pub fn append_attribute_name(&self, name: String) -> Self {
|
||||
let mut p = self.clone();
|
||||
p.0.push(AttrPathSegment::AttributeName(name));
|
||||
|
|
@ -85,6 +88,19 @@ impl<T> BaseValue<T> {
|
|||
Self::Known(v) => BaseValue::Known(f(v)?),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn expect_known(&self, path: AttrPath) -> DResult<&T> {
|
||||
match self {
|
||||
BaseValue::Null => {
|
||||
Err(Diagnostics::error_string("expected value, found null value").with_path(path))
|
||||
}
|
||||
BaseValue::Unknown => Err(Diagnostics::error_string(
|
||||
"expected known value, found unknown value",
|
||||
)
|
||||
.with_path(path)),
|
||||
BaseValue::Known(v) => Ok(v),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub trait ValueModel: Sized {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue