async_mpd/client/resp/
mod.rs

1use crate::client::resp::respmap_handlers::{ListallResponse, ListallinfoResponse};
2use crate::protocol::Stats;
3use crate::{protocol, DatabaseVersion, Error, Status, Subsystem, Track};
4use async_net::TcpStream;
5use futures_lite::io::BufReader;
6use futures_lite::AsyncBufReadExt;
7
8pub mod handlers;
9pub mod respmap;
10pub mod respmap_handlers;
11
12/// Expect one line response
13pub(crate) async fn read_resp_line(reader: &mut BufReader<TcpStream>) -> Result<String, Error> {
14    let mut line = String::new();
15    reader.read_line(&mut line).await?;
16    Ok(line.trim().to_string())
17}
18
19/// A Enum-wrapped response
20pub enum WrappedResponse {
21    Ok,
22    ListAllInfo(ListallinfoResponse),
23    Tracks(Vec<Track>),
24    Listall(ListallResponse),
25    Subsystem(Subsystem),
26    DatabaseVersion(DatabaseVersion),
27    Status(Status),
28    Stats(Stats),
29}
30
31impl From<()> for WrappedResponse {
32    fn from(_: ()) -> Self {
33        WrappedResponse::Ok
34    }
35}
36
37impl From<ListallinfoResponse> for WrappedResponse {
38    fn from(l: ListallinfoResponse) -> Self {
39        WrappedResponse::ListAllInfo(l)
40    }
41}
42
43impl From<Vec<protocol::Track>> for WrappedResponse {
44    fn from(t: Vec<Track>) -> Self {
45        WrappedResponse::Tracks(t)
46    }
47}
48
49impl From<ListallResponse> for WrappedResponse {
50    fn from(l: ListallResponse) -> Self {
51        WrappedResponse::Listall(l)
52    }
53}
54
55impl From<protocol::Subsystem> for WrappedResponse {
56    fn from(s: Subsystem) -> Self {
57        WrappedResponse::Subsystem(s)
58    }
59}
60
61impl From<protocol::DatabaseVersion> for WrappedResponse {
62    fn from(d: DatabaseVersion) -> Self {
63        WrappedResponse::DatabaseVersion(d)
64    }
65}
66
67impl From<protocol::Status> for WrappedResponse {
68    fn from(s: Status) -> Self {
69        WrappedResponse::Status(s)
70    }
71}
72
73impl From<protocol::Stats> for WrappedResponse {
74    fn from(s: Stats) -> Self {
75        WrappedResponse::Stats(s)
76    }
77}