Add interface package. Start adding auth stuff for refreshing tokens.

This commit is contained in:
jude
2023-09-12 19:35:49 +01:00
parent 5ff56d8396
commit 08cc752932
20 changed files with 4934 additions and 67 deletions

View File

@ -0,0 +1,6 @@
use async_trait::async_trait;
#[async_trait]
pub trait Auth {
fn login(&mut self) -> Result<(), reqwest::Error>;
}

View File

@ -5,6 +5,8 @@ use std::fmt::{Debug, Display, Formatter};
pub struct NavidromeBuilder {
base: Option<String>,
token: Option<String>,
username: Option<String>,
password: Option<String>,
}
#[derive(Debug)]
@ -26,6 +28,8 @@ impl NavidromeBuilder {
return NavidromeBuilder {
base: None,
token: None,
username: None,
password: None,
};
}
@ -39,6 +43,16 @@ impl NavidromeBuilder {
return self;
}
pub fn username(&mut self, username: impl ToString) -> &mut NavidromeBuilder {
self.username = Some(username.to_string());
return self;
}
pub fn password(&mut self, password: impl ToString) -> &mut NavidromeBuilder {
self.password = Some(password.to_string());
return self;
}
pub fn build(&self) -> Result<Navidrome, NavidromeBuilderError> {
let client = reqwest::ClientBuilder::new()
.build()
@ -50,10 +64,9 @@ impl NavidromeBuilder {
.clone()
.ok_or(NavidromeBuilderError::MissingParam)?,
http: client,
token: self
.token
.clone()
.ok_or(NavidromeBuilderError::MissingParam)?,
token: self.token.clone(),
username: self.username.ok_or(NavidromeBuilderError::MissingParam)?,
password: self.password.ok_or(NavidromeBuilderError::MissingParam)?,
});
}
}

View File

@ -13,7 +13,9 @@ pub type MediaResult<U> = Result<U, reqwest::Error>;
pub struct Navidrome {
base: String,
http: reqwest::Client,
token: String,
token: Option<String>,
username: String,
password: String,
}
impl QualifyPath for Navidrome {