cas.h (2125B)
1 #ifndef KIT_DIST_CAS_H 2 #define KIT_DIST_CAS_H 3 4 #include <kit/core.h> 5 #include <stddef.h> 6 #include <stdint.h> 7 8 #include "dist.h" 9 #include "tree.h" 10 11 #define DIST_CAS_PATH_MAX 1024u 12 13 typedef struct DistCasHost { 14 const KitFileIO* file_io; 15 int (*mkdir_p)(void* user, const char* path); 16 int (*mark_executable)(void* user, const char* path); 17 void* user; 18 } DistCasHost; 19 20 typedef struct DistCas { 21 DistCasHost host; 22 const char* root; 23 } DistCas; 24 25 int dist_cas_blob_path(char* out, size_t cap, const char* root, 26 const uint8_t blob[DIST_BLAKE2B_LEN]); 27 int dist_cas_tree_path(char* out, size_t cap, const char* root, 28 const uint8_t tree[DIST_BLAKE2B_LEN]); 29 int dist_cas_index_path(char* out, size_t cap, const char* root, 30 const uint8_t index[DIST_BLAKE2B_LEN]); 31 int dist_cas_chunk_path(char* out, size_t cap, const char* root, 32 const uint8_t blob[DIST_BLAKE2B_LEN], 33 uint64_t chunk_index); 34 int dist_cas_blob_relpath(char* out, size_t cap, 35 const uint8_t blob[DIST_BLAKE2B_LEN]); 36 int dist_cas_tree_relpath(char* out, size_t cap, 37 const uint8_t tree[DIST_BLAKE2B_LEN]); 38 int dist_cas_index_relpath(char* out, size_t cap, 39 const uint8_t index[DIST_BLAKE2B_LEN]); 40 int dist_cas_chunk_relpath(char* out, size_t cap, 41 const uint8_t blob[DIST_BLAKE2B_LEN], 42 uint64_t chunk_index); 43 int dist_cas_put_blob(DistCas* cas, const uint8_t blob[DIST_BLAKE2B_LEN], 44 const uint8_t* data, size_t len); 45 int dist_cas_get_blob(DistCas* cas, const uint8_t blob[DIST_BLAKE2B_LEN], 46 KitFileData* out); 47 int dist_cas_put_tree(DistCas* cas, const uint8_t tree[DIST_BLAKE2B_LEN], 48 const uint8_t* data, size_t len); 49 int dist_cas_get_tree(DistCas* cas, const uint8_t tree[DIST_BLAKE2B_LEN], 50 KitFileData* out); 51 int dist_cas_materialize_tree(DistCas* cas, const DistTree* tree, 52 const char* dst); 53 54 #endif