config.rs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. use uuid::Uuid;
  2. use std::str::FromStr;
  3. use std::fmt;
  4. use version;
  5. #[derive(Clone,Debug)]
  6. pub struct SessionConfig {
  7. pub user_agent: String,
  8. pub device_id: String,
  9. }
  10. impl Default for SessionConfig {
  11. fn default() -> SessionConfig {
  12. let device_id = Uuid::new_v4().hyphenated().to_string();
  13. SessionConfig {
  14. user_agent: version::version_string(),
  15. device_id: device_id,
  16. }
  17. }
  18. }
  19. #[derive(Clone, Copy, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)]
  20. pub enum Bitrate {
  21. Bitrate96,
  22. Bitrate160,
  23. Bitrate320,
  24. }
  25. impl FromStr for Bitrate {
  26. type Err = ();
  27. fn from_str(s: &str) -> Result<Self, Self::Err> {
  28. match s {
  29. "96" => Ok(Bitrate::Bitrate96),
  30. "160" => Ok(Bitrate::Bitrate160),
  31. "320" => Ok(Bitrate::Bitrate320),
  32. _ => Err(()),
  33. }
  34. }
  35. }
  36. impl Default for Bitrate {
  37. fn default() -> Bitrate {
  38. Bitrate::Bitrate160
  39. }
  40. }
  41. #[derive(Clone, Copy, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)]
  42. pub enum DeviceType {
  43. Unknown = 0,
  44. Computer = 1,
  45. Tablet = 2,
  46. Smartphone = 3,
  47. Speaker = 4,
  48. TV = 5,
  49. AVR = 6,
  50. STB = 7,
  51. AudioDongle = 8,
  52. }
  53. impl FromStr for DeviceType {
  54. type Err = ();
  55. fn from_str(s: &str) -> Result<Self, Self::Err> {
  56. use self::DeviceType::*;
  57. match s.to_lowercase().as_ref() {
  58. "computer" => Ok(Computer),
  59. "tablet" => Ok(Tablet),
  60. "smartphone" => Ok(Smartphone),
  61. "speaker" => Ok(Speaker),
  62. "tv" => Ok(TV),
  63. "avr" => Ok(AVR),
  64. "stb" => Ok(STB),
  65. "audiodongle" => Ok(AudioDongle),
  66. _ => Err(()),
  67. }
  68. }
  69. }
  70. impl fmt::Display for DeviceType {
  71. fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  72. use self::DeviceType::*;
  73. match *self {
  74. Unknown => f.write_str("Unknown"),
  75. Computer => f.write_str("Computer"),
  76. Tablet => f.write_str("Tablet"),
  77. Smartphone => f.write_str("Smartphone"),
  78. Speaker => f.write_str("Speaker"),
  79. TV => f.write_str("TV"),
  80. AVR => f.write_str("AVR"),
  81. STB => f.write_str("STB"),
  82. AudioDongle => f.write_str("AudioDongle"),
  83. }
  84. }
  85. }
  86. impl Default for DeviceType {
  87. fn default() -> DeviceType {
  88. DeviceType::Speaker
  89. }
  90. }
  91. #[derive(Clone,Debug)]
  92. pub struct PlayerConfig {
  93. pub bitrate: Bitrate,
  94. pub onstart: Option<String>,
  95. pub onstop: Option<String>,
  96. }
  97. impl Default for PlayerConfig {
  98. fn default() -> PlayerConfig {
  99. PlayerConfig {
  100. bitrate: Bitrate::default(),
  101. onstart: None,
  102. onstop: None,
  103. }
  104. }
  105. }
  106. #[derive(Clone,Debug)]
  107. pub struct ConnectConfig {
  108. pub name: String,
  109. pub device_type: DeviceType,
  110. pub volume: i32,
  111. }