1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
//! Service API that promotes monitoring and interactivity
//!
//! See [`Service`].
mod objects;
mod service;
mod validation;
use std::sync::Arc;
use parking_lot::Mutex;
use crate::objects::Objects;
pub use self::{
objects::{InsertObject, Operation},
service::{Service, State},
validation::{Validation, ValidationFailed},
};
/// The kernel services
pub struct Services {
/// The objects service
///
/// Allows for inserting objects into a store after they were created.
pub objects: Service<Objects>,
/// The validation service
///
/// Validates objects that are inserted using the objects service.
pub validation: Arc<Mutex<Service<Validation>>>,
}
impl Services {
/// Construct an instance of `Services`
pub fn new() -> Self {
let mut objects = Service::<Objects>::default();
let validation = Arc::new(Mutex::new(Service::default()));
objects.subscribe(validation.clone());
Self {
objects,
validation,
}
}
}
impl Default for Services {
fn default() -> Self {
Self::new()
}
}