use crate::{FieldNameAndType, ValueResolutionCtx};
#[derive(Debug, thiserror::Error)]
#[cfg_attr(feature = "error_reporting", derive(miette::Diagnostic))]
pub enum ParamsResolveError {
#[cfg_attr(
feature = "error_reporting",
diagnostic(
code(peace_params::params_resolve_error::from),
help("Make sure `{field_type_name}` has been inserted into `resources`.",
field_type_name = value_resolution_ctx
.resolution_chain()
.last()
.map(FieldNameAndType::type_name)
.unwrap_or(value_resolution_ctx.params_type_name())
)
)
)]
#[error("Failed to resolve `{field_type_name}` to populate:\n\
\n\
```rust\n\
{value_resolution_ctx}\n\
```",
field_type_name = value_resolution_ctx
.resolution_chain()
.last()
.map(FieldNameAndType::type_name)
.unwrap_or(value_resolution_ctx.params_type_name()))]
InMemory {
value_resolution_ctx: ValueResolutionCtx,
},
#[cfg_attr(
feature = "error_reporting",
diagnostic(
code(peace_params::params_resolve_error::from_borrow_conflict),
help("By design `{field_type_name}` must not be borrowed mutably.",
field_type_name = value_resolution_ctx
.resolution_chain()
.last()
.map(FieldNameAndType::type_name)
.unwrap_or(value_resolution_ctx.params_type_name())
)
)
)]
#[error("Borrow conflict on `{field_type_name}` to populate:\n\
\n\
```rust\n\
{value_resolution_ctx}\n\
```",
field_type_name = value_resolution_ctx
.resolution_chain()
.last()
.map(FieldNameAndType::type_name)
.unwrap_or(value_resolution_ctx.params_type_name())
)
]
InMemoryBorrowConflict {
value_resolution_ctx: ValueResolutionCtx,
},
#[cfg_attr(
feature = "error_reporting",
diagnostic(
code(peace_params::params_resolve_error::from_map),
help(
"Make sure `{from_type_name}` has been inserted into `resources`.\n\
Value resolution mode is: {value_resolution_mode:?}",
value_resolution_mode = value_resolution_ctx.value_resolution_mode()
)
)
)]
#[error(
"Failed to resolve `{from_type_name}` to populate:\n\
\n\
```rust\n\
{value_resolution_ctx}\n\
```"
)]
FromMap {
value_resolution_ctx: ValueResolutionCtx,
from_type_name: String,
},
#[cfg_attr(
feature = "error_reporting",
diagnostic(
code(peace_params::params_resolve_error::from_map_borrow_conflict),
help("By design `{from_type_name}` must not be borrowed mutably.")
)
)]
#[error(
"Borrow conflict on `{from_type_name}` to populate:\n\
\n\
```rust\n\
{value_resolution_ctx}\n\
```"
)]
FromMapBorrowConflict {
value_resolution_ctx: ValueResolutionCtx,
from_type_name: String,
},
}