Compare commits
3 commits
b14ff40a29
...
121fdb1d72
Author | SHA1 | Date | |
---|---|---|---|
121fdb1d72 | |||
da032c223f | |||
5e0536d756 |
8 changed files with 64 additions and 9 deletions
|
@ -13,7 +13,7 @@ pub(crate) fn add(
|
||||||
separator: &String,
|
separator: &String,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
let names_file = names::read_names_file(path)?;
|
let names_file = names::read_names_file(path)?;
|
||||||
let mut names = names::load_names(names_file)?;
|
let mut names = names::load_names(&names_file)?;
|
||||||
|
|
||||||
if names.iter().any(|site| site.url.contains(url)) {
|
if names.iter().any(|site| site.url.contains(url)) {
|
||||||
return Err(Error {
|
return Err(Error {
|
||||||
|
|
|
@ -15,7 +15,7 @@ pub(crate) fn print(
|
||||||
json: bool,
|
json: bool,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
let names_file = names::read_names_file(path)?;
|
let names_file = names::read_names_file(path)?;
|
||||||
let mut names = names::load_names(names_file)?;
|
let mut names = names::load_names(&names_file)?;
|
||||||
|
|
||||||
if let Some(filter) = filter {
|
if let Some(filter) = filter {
|
||||||
names.retain(|f| &f.url == filter);
|
names.retain(|f| &f.url == filter);
|
||||||
|
|
|
@ -5,7 +5,7 @@ use crate::commands::utils::{site_string, PrintOptions};
|
||||||
|
|
||||||
pub(crate) fn remove(path: &Path, url: &String, separator: &String) -> Result<(), Error> {
|
pub(crate) fn remove(path: &Path, url: &String, separator: &String) -> Result<(), Error> {
|
||||||
let names_file = names::read_names_file(path)?;
|
let names_file = names::read_names_file(path)?;
|
||||||
let mut names = names::load_names(names_file)?;
|
let mut names = names::load_names(&names_file)?;
|
||||||
|
|
||||||
names.retain(|site| {
|
names.retain(|site| {
|
||||||
if &site.url == url {
|
if &site.url == url {
|
||||||
|
|
|
@ -14,10 +14,8 @@ pub struct Error {
|
||||||
pub data: String,
|
pub data: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) static DIRECTORIES_ERROR_MESSAGE: &str = "could not retreive a valid home path from the operating system. maybe try to define the HOME enviroment variable if you\'re on a unix or unix like operating system.";
|
impl Error {
|
||||||
|
fn error_fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
impl core::fmt::Debug for Error {
|
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
write!(
|
write!(
|
||||||
f,
|
f,
|
||||||
"A {:?} error has occured.\nDetails: {}",
|
"A {:?} error has occured.\nDetails: {}",
|
||||||
|
@ -25,3 +23,19 @@ impl core::fmt::Debug for Error {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl std::error::Error for Error {}
|
||||||
|
|
||||||
|
pub(crate) static DIRECTORIES_ERROR_MESSAGE: &str = "could not retreive a valid home path from the operating system. maybe try to define the HOME enviroment variable if you\'re on a unix or unix like operating system.";
|
||||||
|
|
||||||
|
impl std::fmt::Display for Error {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
self.error_fmt(f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::fmt::Debug for Error {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
self.error_fmt(f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
pub mod directories;
|
pub mod directories;
|
||||||
pub mod errors;
|
pub mod errors;
|
||||||
pub mod names;
|
pub mod names;
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests;
|
||||||
|
|
|
@ -8,7 +8,7 @@ pub struct Site {
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_names(names: String) -> Result<Vec<Site>, Error> {
|
pub fn load_names(names: &str) -> Result<Vec<Site>, Error> {
|
||||||
match serde_json::from_str::<Vec<Site>>(&names) {
|
match serde_json::from_str::<Vec<Site>>(&names) {
|
||||||
Ok(content) => {
|
Ok(content) => {
|
||||||
log::debug!("successfully parsed names.json.");
|
log::debug!("successfully parsed names.json.");
|
||||||
|
|
39
crates/shared/src/tests.rs
Normal file
39
crates/shared/src/tests.rs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
use crate::{
|
||||||
|
errors::Error,
|
||||||
|
names::{load_names, read_names_file},
|
||||||
|
};
|
||||||
|
use std::{env, error};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_name_parsing() -> Result<(), Error> {
|
||||||
|
let names =
|
||||||
|
load_names(r#"[{"url": "sus.com", "name": "sussy"}, {"url": "sussy.com", "name": null}]"#)?;
|
||||||
|
|
||||||
|
assert_eq!(names.len(), 2);
|
||||||
|
assert_eq!(names[0].url, "sus.com");
|
||||||
|
assert_eq!(names[0].name.as_ref().unwrap(), "sussy");
|
||||||
|
assert_eq!(names[1].url, "sussy.com");
|
||||||
|
assert!(names[1].name.is_none());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_invalid_parsing() {
|
||||||
|
let no_url_field = load_names(r#"[{"name":""}]"#);
|
||||||
|
let no_fields = load_names(r#"[{}]"#);
|
||||||
|
let trailing_array = load_names("[");
|
||||||
|
|
||||||
|
assert!(no_url_field.is_err());
|
||||||
|
assert!(no_fields.is_err());
|
||||||
|
assert!(trailing_array.is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn reading_a_non_existent_names_file() -> Result<(), Box<dyn error::Error>> {
|
||||||
|
let temp_file = env::temp_dir().join("meowy-test-names.json");
|
||||||
|
let contents = read_names_file(&temp_file)?;
|
||||||
|
assert_eq!(contents, "[]");
|
||||||
|
std::fs::remove_file(temp_file)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -36,5 +36,5 @@ pub fn init_names() -> Result<(), Error> {
|
||||||
fn get_names() -> Result<Vec<Site>, Error> {
|
fn get_names() -> Result<Vec<Site>, Error> {
|
||||||
let names_path = directories::get_names_path()?;
|
let names_path = directories::get_names_path()?;
|
||||||
let names_file = names::read_names_file(&names_path)?;
|
let names_file = names::read_names_file(&names_path)?;
|
||||||
names::load_names(names_file)
|
names::load_names(&names_file)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue