1
0
Fork 0
mirror of https://github.com/Nutomic/ibis.git synced 2025-02-04 22:04:42 +00:00
ibis/src/utils.rs

36 lines
1.2 KiB
Rust
Raw Normal View History

2023-11-29 15:41:29 +00:00
use crate::database::edit::DbEdit;
use crate::database::edit::EditVersion;
2023-11-27 15:34:45 +00:00
use crate::error::MyResult;
use anyhow::anyhow;
use diffy::{apply, Patch};
use rand::{distributions::Alphanumeric, thread_rng, Rng};
use url::{ParseError, Url};
2023-11-21 15:27:18 +00:00
pub fn generate_activity_id(domain: &Url) -> Result<Url, ParseError> {
let port = domain.port().unwrap();
2023-11-15 00:32:46 +00:00
let domain = domain.domain().unwrap();
let id: String = thread_rng()
.sample_iter(&Alphanumeric)
.take(7)
.map(char::from)
.collect();
2023-11-21 15:27:18 +00:00
Url::parse(&format!("http://{}:{}/objects/{}", domain, port, id))
}
2023-11-27 15:34:45 +00:00
/// Starting from empty string, apply edits until the specified version is reached. If no version is
/// given, apply all edits up to latest version.
///
/// TODO: testing
/// TODO: should cache all these generated versions
2023-11-28 12:04:33 +00:00
pub fn generate_article_version(edits: &Vec<DbEdit>, version: &EditVersion) -> MyResult<String> {
2023-11-27 15:34:45 +00:00
let mut generated = String::new();
for e in edits {
let patch = Patch::from_str(&e.diff)?;
generated = apply(&generated, &patch)?;
2023-11-28 12:04:33 +00:00
if &e.version == version {
2023-11-27 15:34:45 +00:00
return Ok(generated);
}
}
2023-11-28 12:04:33 +00:00
Err(anyhow!("failed to generate article version").into())
2023-11-27 15:34:45 +00:00
}