Files
pmomusic/pmoupnp/src/services/service_methods.rs

73 lines
2.2 KiB
Rust
Raw Normal View History

2025-10-05 14:35:44 +02:00
//! Implémentation des traits UPnP pour Service.
2025-10-09 20:26:51 +02:00
//!
//! Ce module fournit les implémentations des traits principaux du framework
//! UPnP pour le type [`Service`]:
//!
//! - [`Display`] : Affichage formaté d'un service
//! - [`UpnpTyped`] : Accès aux métadonnées de type UPnP
//! - [`UpnpObject`] : Sérialisation XML pour la description de device
//! - [`UpnpModel`] : Association du modèle avec son type d'instance
//!
//! Ces implémentations permettent aux services de s'intégrer dans
//! l'architecture UPnP générique du framework.
2025-10-05 14:35:44 +02:00
use xmltree::{Element, XMLNode};
use crate::{
2025-10-19 13:42:29 +02:00
UpnpModel, UpnpObject, UpnpObjectType, UpnpTyped,
2025-10-05 14:35:44 +02:00
services::{Service, ServiceInstance},
};
impl std::fmt::Display for Service {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "Service({}:{})", self.name(), self.version())
}
}
impl UpnpTyped for Service {
fn as_upnp_object_type(&self) -> &UpnpObjectType {
&self.object
}
}
impl UpnpObject for Service {
fn to_xml_element(&self) -> Element {
let mut elem = Element::new("service");
// serviceType
let mut service_type = Element::new("serviceType");
2025-10-19 13:42:29 +02:00
service_type
.children
.push(XMLNode::Text(self.service_type()));
2025-10-05 14:35:44 +02:00
elem.children.push(XMLNode::Element(service_type));
// serviceId
let mut service_id = Element::new("serviceId");
service_id.children.push(XMLNode::Text(self.service_id()));
elem.children.push(XMLNode::Element(service_id));
// SCPDURL
let mut scpdurl = Element::new("SCPDURL");
scpdurl.children.push(XMLNode::Text(self.scpd_route()));
elem.children.push(XMLNode::Element(scpdurl));
2025-10-05 14:35:44 +02:00
// controlURL
let mut control_url = Element::new("controlURL");
control_url
2025-10-19 13:42:29 +02:00
.children
.push(XMLNode::Text(self.control_route()));
elem.children.push(XMLNode::Element(control_url));
2025-10-05 14:35:44 +02:00
2025-10-05 21:58:36 +02:00
// eventSubURL
let mut event_sub_url = Element::new("eventSubURL");
event_sub_url.children.push(XMLNode::Text(self.event_route()));
elem.children.push(XMLNode::Element(event_sub_url));
2025-10-05 14:35:44 +02:00
elem
}
}
impl UpnpModel for Service {
type Instance = ServiceInstance;
2025-10-19 13:42:29 +02:00
}