wip: add address type constants, blob attributes
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Tomáš Mládek 2023-06-18 19:49:26 +02:00 committed by Tomáš Mládek
parent e6a1d3ba02
commit 8bb551bb45
3 changed files with 36 additions and 4 deletions

View file

@ -673,10 +673,21 @@ pub async fn get_address(
let (bytes, _) = web::block(|| fetch_external(url)).await??;
let hash_result = hash(&bytes);
(Address::Hash(hash_result), false)
} else if let Some(type_str) = query.get("type") {
match type_str.as_str() {
"Hash" => (upend::database::constants::TYPE_HASH_ADDRESS.clone(), true),
"Uuid" => (upend::database::constants::TYPE_UUID_ADDRESS.clone(), true),
"Attribute" => (
upend::database::constants::TYPE_ATTRIBUTE_ADDRESS.clone(),
true,
),
"Url" => (upend::database::constants::TYPE_URL_ADDRESS.clone(), true),
_ => return Err(ErrorBadRequest(format!("Unknown type: {type_str}"))),
}
} else {
return Err(ErrorBadRequest(anyhow!(
"Specify one of: `attribute`, `url`, `url_content`."
)));
return Err(ErrorBadRequest(
"Specify one of: `attribute`, `url`, `url_content`, `type`.",
));
};
let mut response = HttpResponse::Ok();

View file

@ -22,4 +22,8 @@ lazy_static! {
value: "HIER_ROOT".into(),
};
pub static ref HIER_ROOT_ADDR: Address = HIER_ROOT_INVARIANT.entity().unwrap();
pub static ref TYPE_HASH_ADDRESS: Address = Address::Hash(crate::util::hash::Hash(vec![]));
pub static ref TYPE_UUID_ADDRESS: Address = Address::Uuid(uuid::Uuid::nil());
pub static ref TYPE_ATTRIBUTE_ADDRESS: Address = Address::Attribute("".to_string());
pub static ref TYPE_URL_ADDRESS: Address = Address::Url(url::Url::parse("up:").unwrap());
}

View file

@ -2,7 +2,9 @@ use self::db::files;
use super::{Blob, StoreError, UpStore, UpdatePathOutcome};
use crate::addressing::Address;
use crate::database::constants::{ADDED_ATTR, ATTR_BY_ATTR, IS_OF_ATTR, LABEL_ATTR};
use crate::database::constants::{
ADDED_ATTR, ATTR_BY_ATTR, IS_OF_ATTR, LABEL_ATTR, TYPE_HASH_ADDRESS,
};
use crate::database::entry::Entry;
use crate::database::hierarchies::{
resolve_path, resolve_path_cached, ResolveCache, UHierPath, UNode,
@ -103,6 +105,21 @@ impl FsStore {
let db = db.borrow();
let upconnection = db.connection()?;
// Initialize types, etc...
debug!("Initializing DB types.");
upend_insert_addr!(
upconnection,
Address::Attribute(FILE_SIZE_KEY.to_string()),
IS_OF_ATTR,
TYPE_HASH_ADDRESS
)?;
upend_insert_addr!(
upconnection,
Address::Attribute(FILE_MIME_KEY.to_string()),
IS_OF_ATTR,
TYPE_HASH_ADDRESS
)?;
// Walk through the vault, find all paths
debug!("Traversing vault directory");
let absolute_dir_path = fs::canonicalize(&*self.path)?;