1
use serde::{Deserialize, Serialize};
2

            
3
use crate::{
4
    commands::{CommandResponse, ResponseParserError, single_optional_item_command_request},
5
    response_tokenizer::ResponseAttributes,
6
    types::{DbSongInfo, OneOrRange, Priority, SongId, SongPosition},
7
};
8

            
9
single_optional_item_command_request!(PlaylistInfo, "playlistinfo", OneOrRange);
10

            
11
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
12
pub struct PlaylistInfoResponse(Vec<PlaylistInfoResponseEntry>);
13

            
14
impl PlaylistInfoResponse {
15
    pub fn new(items: Vec<PlaylistInfoResponseEntry>) -> Self {
16
        PlaylistInfoResponse(items)
17
    }
18
}
19

            
20
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
21
pub struct PlaylistInfoResponseEntry {
22
    pub position: SongPosition,
23
    pub id: SongId,
24
    pub priority: Option<Priority>,
25
    pub song_info: DbSongInfo,
26
}
27

            
28
impl PlaylistInfoResponseEntry {
29
    pub fn new(
30
        position: SongPosition,
31
        id: SongId,
32
        priority: Option<Priority>,
33
        song_info: DbSongInfo,
34
    ) -> Self {
35
        PlaylistInfoResponseEntry {
36
            position,
37
            id,
38
            priority,
39
            song_info,
40
        }
41
    }
42
}
43

            
44
impl CommandResponse for PlaylistInfoResponse {
45
    type Request = PlaylistInfoRequest;
46

            
47
    fn parse(_parts: ResponseAttributes<'_>) -> Result<Self, ResponseParserError> {
48
        unimplemented!()
49
    }
50

            
51
    fn serialize(&self) -> Vec<u8> {
52
        unimplemented!("response serialization is not yet implemented for PlaylistInfoResponse")
53
    }
54
}