mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
These PR adds `resource_available` as a common shared util - [x] ./mach build -d does not report any errors - [x] ./mach test-tidy does not report any errors - [x] These changes partially implement https://github.com/servo/servo/issues/36027 --------- Signed-off-by: atbrakhi <atbrakhi@igalia.com>
42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
use std::cell::RefCell;
|
|
use std::collections::HashMap;
|
|
use std::net::TcpStream;
|
|
|
|
use serde::Serialize;
|
|
|
|
use crate::StreamId;
|
|
use crate::protocol::JsonPacketStream;
|
|
|
|
#[derive(Serialize)]
|
|
pub(crate) struct ResourceAvailableReply<T: Serialize> {
|
|
pub from: String,
|
|
#[serde(rename = "type")]
|
|
pub type_: String,
|
|
pub array: Vec<(String, Vec<T>)>,
|
|
}
|
|
|
|
pub(crate) trait ResourceAvailable {
|
|
fn actor_name(&self) -> String;
|
|
|
|
fn get_streams(&self) -> &RefCell<HashMap<StreamId, TcpStream>>;
|
|
|
|
fn resource_available<T: Serialize>(&self, resource: T, resource_type: String) {
|
|
self.resources_available(vec![resource], resource_type);
|
|
}
|
|
|
|
fn resources_available<T: Serialize>(&self, resources: Vec<T>, resource_type: String) {
|
|
let msg = ResourceAvailableReply::<T> {
|
|
from: self.actor_name(),
|
|
type_: "resources-available-array".into(),
|
|
array: vec![(resource_type, resources)],
|
|
};
|
|
|
|
for stream in self.get_streams().borrow_mut().values_mut() {
|
|
let _ = stream.write_json_packet(&msg);
|
|
}
|
|
}
|
|
}
|