use crate::io::{ApiResult, Source};
use acorn_core::prelude::String;
use acorn_schema::agent::{ModelList, ModelSelectors};
#[async_trait::async_trait]
pub trait ModelSelectorsExt: Sized {
async fn resolve(self, source: &Option<String>, offline: bool) -> ApiResult<Self>;
}
#[async_trait::async_trait]
impl ModelSelectorsExt for ModelSelectors {
async fn resolve(self, source: &Option<String>, offline: bool) -> ApiResult<Self> {
match source {
| Some(source) => Source::read(source, offline)
.await
.and_then(|content| ModelList::parse(&content).and_then(ModelList::selectors).map_err(Into::into))
.map(|file| self.merge(file)),
| None => Ok(self),
}
}
}
#[cfg(test)]
mod tests;