This is a UPnP client library for Rust.

update README.md

Changed files
+85 -1
+85 -1
README.md
··· 1 - ## UPNP Client 1 + <h1>UPnP Client</h1> 2 + <p> 3 + <a href="LICENSE" target="_blank"> 4 + <img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg" /> 5 + </a> 6 + <a href="https://crates.io/crates/upnp-client-rs" target="_blank"> 7 + <img src="https://img.shields.io/crates/v/upnp-client-rs.svg" /> 8 + </a> 9 + 10 + <a href="https://crates.io/crates/upnp-client-rs" target="_blank"> 11 + <img src="https://img.shields.io/crates/dr/upnp-client-rs" /> 12 + </a> 13 + 14 + <a href="https://docs.rs/upnp-client-rs" target="_blank"> 15 + <img src="https://docs.rs/upnp-client-rs/badge.svg" /> 16 + </a> 17 + </p> 2 18 3 19 This is a UPNP client library for Rust. 4 20 ··· 10 26 [dependencies] 11 27 upnp-client = "0.1" 12 28 ``` 29 + 30 + ### Example 31 + 32 + This example will print out all the devices found on the network. 33 + 34 + ```rust 35 + use colored_json::prelude::*; 36 + use futures_util::StreamExt; 37 + 38 + use crate::discovery::discover_pnp_locations; 39 + 40 + mod discovery; 41 + mod types; 42 + 43 + #[tokio::main] 44 + async fn main() -> Result<(), Box<dyn std::error::Error>> { 45 + let devices = discover_pnp_locations(); 46 + tokio::pin!(devices); 47 + 48 + while let Some(device) = devices.next().await { 49 + let json = serde_json::to_string_pretty(&device)?; 50 + println!("{}", json.to_colored_json_auto()?); 51 + } 52 + 53 + Ok(()) 54 + } 55 + ``` 56 + 57 + Output: 58 + 59 + ```json 60 + { 61 + "device_type": "urn:schemas-upnp-org:device:MediaRenderer:1", 62 + "friendly_name": "Kodi (MacBook-Pro-de-Tsiry-4.local)", 63 + "location": "http://192.168.8.101:1825/", 64 + "manufacturer": "XBMC Foundation", 65 + "manufacturer_url": "http://kodi.tv/", 66 + "model_description": "Kodi - Media Renderer", 67 + "model_name": "Kodi", 68 + "model_number": "18.4 Git:20190831-3ade758ceb", 69 + "services": [ 70 + { 71 + "control_url": "/AVTransport/d599320b-2d3b-e0d7-3224-dc1c4b074dae/control.xml", 72 + "event_sub_url": "/AVTransport/d599320b-2d3b-e0d7-3224-dc1c4b074dae/event.xml", 73 + "scpd_url": "/AVTransport/d599320b-2d3b-e0d7-3224-dc1c4b074dae/scpd.xml", 74 + "service_id": "urn:upnp-org:serviceId:AVTransport", 75 + "service_type": "urn:schemas-upnp-org:service:AVTransport:1" 76 + }, 77 + { 78 + "control_url": "/ConnectionManager/d599320b-2d3b-e0d7-3224-dc1c4b074dae/control.xml", 79 + "event_sub_url": "/ConnectionManager/d599320b-2d3b-e0d7-3224-dc1c4b074dae/event.xml", 80 + "scpd_url": "/ConnectionManager/d599320b-2d3b-e0d7-3224-dc1c4b074dae/scpd.xml", 81 + "service_id": "urn:upnp-org:serviceId:ConnectionManager", 82 + "service_type": "urn:schemas-upnp-org:service:ConnectionManager:1" 83 + }, 84 + { 85 + "control_url": "/RenderingControl/d599320b-2d3b-e0d7-3224-dc1c4b074dae/control.xml", 86 + "event_sub_url": "/RenderingControl/d599320b-2d3b-e0d7-3224-dc1c4b074dae/event.xml", 87 + "scpd_url": "/RenderingControl/d599320b-2d3b-e0d7-3224-dc1c4b074dae/scpd.xml", 88 + "service_id": "urn:upnp-org:serviceId:RenderingControl", 89 + "service_type": "urn:schemas-upnp-org:service:RenderingControl:1" 90 + } 91 + ] 92 + } 93 + ``` 94 + 95 + ### License 96 + MIT