Skip to content

Commit

Permalink
FileApl, refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
djkato committed Jul 10, 2024
1 parent 303c122 commit 528a391
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 45 deletions.
3 changes: 3 additions & 0 deletions sdk/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ features = [
"console",
]

[dev-dependencies]

[features]
default = ["middleware", "redis_apl", "webhook_utils", "tracing"]
middleware = [
Expand All @@ -73,6 +75,7 @@ middleware = [
"dep:http",
]
redis_apl = ["dep:redis"]
file_apl = []
webhook_utils = ["dep:http"]
tracing = ["dep:tracing", "dep:tracing-subscriber"]
bridge = [
Expand Down
31 changes: 0 additions & 31 deletions sdk/src/apl/env_apl.rs

This file was deleted.

75 changes: 63 additions & 12 deletions sdk/src/apl/file_apl.rs
Original file line number Diff line number Diff line change
@@ -1,36 +1,87 @@
use std::{
collections::HashMap,
ops::{Deref, DerefMut},
};

use crate::AuthData;

use super::APL;
use anyhow::{Result};
use anyhow::{anyhow, Result};
use async_trait::async_trait;

use serde::{Deserialize, Serialize};
use tracing::debug;

#[derive(Clone, Debug)]
/**
is not implemented yet!
Only works for this app, can't have multiple apps use same file
*/
pub struct FileApl {
pub path: String,
}

#[async_trait]
impl APL for FileApl {
async fn set(&self, _auth_data: crate::AuthData) -> Result<()> {
todo!()
async fn set(&self, auth_data: crate::AuthData) -> Result<()> {
let path = std::path::Path::new(&self.path);
debug!("reading from {:?}", &path);
let mut auths: FileStructure = serde_json::from_str(&std::fs::read_to_string(path)?)?;

auths.insert(auth_data.saleor_api_url.clone(), auth_data);

debug!("writing to {:?}", &path);
std::fs::write(path, &serde_json::to_string_pretty(&auths)?.as_bytes())?;
Ok(())
}
async fn get(&self, _saleor_api_url: &str) -> Result<crate::AuthData> {
todo!()

async fn get(&self, saleor_api_url: &str) -> Result<crate::AuthData> {
let path = std::path::Path::new(&self.path);
debug!("reading from {:?}", &path);
let auth_data: FileStructure = serde_json::from_str(&std::fs::read_to_string(path)?)?;
auth_data
.get(saleor_api_url)
.cloned()
.ok_or(anyhow!("AuthData for {saleor_api_url} not found"))
}

async fn get_all(&self) -> Result<Vec<crate::AuthData>> {
todo!()
let path = std::path::Path::new(&self.path);
debug!("reading from {:?}", &path);
let auth_data: FileStructure = serde_json::from_str(&std::fs::read_to_string(path)?)?;
Ok(auth_data.0.values().cloned().collect())
}
async fn delete(&self, _saleor_api_url: &str) -> Result<()> {
todo!()

async fn delete(&self, saleor_api_url: &str) -> Result<()> {
let path = std::path::Path::new(&self.path);
debug!("reading from {:?}", &path);
let mut auths: FileStructure = serde_json::from_str(&std::fs::read_to_string(path)?)?;
auths.remove(saleor_api_url);

debug!("writing to {:?}", &path);
std::fs::write(path, &serde_json::to_string_pretty(&auths)?.as_bytes())?;
Ok(())
}

async fn is_ready(&self) -> Result<()> {
todo!()
Ok(())
}

async fn is_configured(&self) -> Result<()> {
todo!()
Ok(())
}
}

#[derive(Debug, Clone, Deserialize, Serialize)]
struct FileStructure(HashMap<String, AuthData>);

impl Deref for FileStructure {
type Target = HashMap<String, AuthData>;
fn deref(&self) -> &Self::Target {
&self.0
}
}

impl DerefMut for FileStructure {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
2 changes: 1 addition & 1 deletion sdk/src/apl/redis_apl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ impl APL for RedisApl {
async fn set(&self, auth_data: AuthData) -> Result<()> {
debug!("set()");
let mut conn = self.client.get_multiplexed_async_connection().await?;
conn.set(
conn.set::<_, _, String>(
self.prepare_key(&auth_data.saleor_api_url),
serde_json::to_string(&auth_data)?,
)
Expand Down
2 changes: 1 addition & 1 deletion sdk/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ impl SaleorApp {
File => {
#[cfg(feature = "file_apl")]
return Ok(Box::new(FileApl {
path: "apl.txt".to_owned(),
path: config.apl_url.to_owned(),
}));
#[cfg(not(feature = "file_apl"))]
{
Expand Down
1 change: 1 addition & 0 deletions sdk/src/tests/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

0 comments on commit 528a391

Please sign in to comment.