use std::fmt; use librespot_protocol as protocol; use crate::spotify_id::to_base16; #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct FileId(pub [u8; 20]); impl FileId { pub fn from_raw(src: &[u8]) -> FileId { let mut dst = [0u8; 20]; dst.clone_from_slice(src); FileId(dst) } pub fn to_base16(&self) -> String { to_base16(&self.0, &mut [0u8; 40]) } } impl fmt::Debug for FileId { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.debug_tuple("FileId").field(&self.to_base16()).finish() } } impl fmt::Display for FileId { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str(&self.to_base16()) } } impl From<&[u8]> for FileId { fn from(src: &[u8]) -> Self { Self::from_raw(src) } } impl From<&protocol::metadata::Image> for FileId { fn from(image: &protocol::metadata::Image) -> Self { Self::from(image.get_file_id()) } } impl From<&protocol::metadata::AudioFile> for FileId { fn from(file: &protocol::metadata::AudioFile) -> Self { Self::from(file.get_file_id()) } } impl From<&protocol::metadata::VideoFile> for FileId { fn from(video: &protocol::metadata::VideoFile) -> Self { Self::from(video.get_file_id()) } }