fix: add --meta filtering support to client/server list mode
Plumb metadata filter from client CLI through the HTTP API to the server's data_service.list_items(). The server accepts a JSON-encoded meta query parameter where null values mean 'key exists' and string values mean 'exact match'. Also fix LZ4 compression round-trip for client mode: - Explicit flush FrameEncoder before drop to avoid sending only the frame header when compress=false - Send _client_compression metadata so client knows actual compression on retrieval (server records compression=None when compress=false) - Use FrameDecoder (frame format) instead of decompress_size_prepended (size-prepended format) to match server storage format
This commit is contained in:
@@ -226,6 +226,7 @@ impl KeepClient {
|
||||
order: &str,
|
||||
start: u64,
|
||||
count: u64,
|
||||
meta: &HashMap<String, Option<String>>,
|
||||
) -> Result<Vec<ItemInfo>, CoreError> {
|
||||
#[derive(serde::Deserialize)]
|
||||
struct ApiResponse {
|
||||
@@ -239,6 +240,12 @@ impl KeepClient {
|
||||
if !tags.is_empty() {
|
||||
params.push(("tags".to_string(), tags.join(",")));
|
||||
}
|
||||
if !meta.is_empty() {
|
||||
let meta_json = serde_json::to_string(meta).map_err(|e| {
|
||||
CoreError::Other(anyhow::anyhow!("Failed to serialize meta filter: {}", e))
|
||||
})?;
|
||||
params.push(("meta".to_string(), meta_json));
|
||||
}
|
||||
|
||||
let param_refs: Vec<(&str, &str)> = params
|
||||
.iter()
|
||||
|
||||
Reference in New Issue
Block a user