use json_syntax::JsonArray;
use crate::{
JsonLdBacktraceBuilder, JsonLdLocatedError, JsonLdObject, algorithms::AsyncJsonLdEnvironment,
context::JsonLdProcessedTermDefinitionRef, object::JsonLdList, syntax::JsonLdContainerItem,
};
use super::{Expanded, Expander};
impl<'a> Expander<'a> {
#[allow(clippy::too_many_arguments)]
pub async fn expand_array(
&self,
env: &impl AsyncJsonLdEnvironment,
active_property_definition: Option<JsonLdProcessedTermDefinitionRef<'_>>,
element: &JsonArray,
from_map: bool,
location: JsonLdBacktraceBuilder<'_>,
) -> Result<Expanded, JsonLdLocatedError> {
let mut is_list = false;
let mut result = Vec::new();
if let Some(definition) = active_property_definition {
is_list = definition.container().contains(JsonLdContainerItem::List);
}
for (i, item) in element.iter().enumerate() {
let item_loc = location.array_index(i);
let e = Box::pin(self.expand_element(env, item, from_map, item_loc)).await?;
result.extend(e);
}
if is_list {
return Ok(Expanded::Object(
JsonLdObject::List(JsonLdList::new(result)).into(),
));
}
Ok(Expanded::Array(result))
}
}