use serde::Serialize;
use crate::protocol::JsonPacketStream;
pub enum ResourceArrayType {
Available,
Updated,
}
#[derive(Serialize)]
pub(crate) struct ResourceAvailableReply<T: Serialize> {
from: String,
#[serde(rename = "type")]
type_: String,
array: Vec<(String, Vec<T>)>,
}
pub(crate) trait ResourceAvailable {
fn actor_name(&self) -> String;
fn resource_array<T: Serialize, S: JsonPacketStream>(
&self,
resource: T,
resource_type: String,
array_type: ResourceArrayType,
stream: &mut S,
) {
self.resources_array(vec![resource], resource_type, array_type, stream);
}
fn resources_array<T: Serialize, S: JsonPacketStream>(
&self,
resources: Vec<T>,
resource_type: String,
array_type: ResourceArrayType,
stream: &mut S,
) {
let msg = ResourceAvailableReply::<T> {
from: self.actor_name(),
type_: match array_type {
ResourceArrayType::Available => "resources-available-array".to_string(),
ResourceArrayType::Updated => "resources-updated-array".to_string(),
},
array: vec![(resource_type, resources)],
};
let _ = stream.write_json_packet(&msg);
}
}