pub struct ValueRedactionBuilder { /* private fields */ }redaction only.Expand description
Builder for redacting arbitrary JSON values.
Unlike RedactionBuilder, this builder works with any
serde_json::Value without requiring HTTP response context or OpenAPI collection.
§Path Syntax
The syntax is auto-detected based on the path prefix:
§JSON Pointer (starts with /)
/field- top-level field/field/subfield- nested field/array/0- array index/field~1with~1slashes-~1escapes//field~0with~0tildes-~0escapes~
§JSONPath (starts with $)
$.field- top-level field$.items[*].id- allidfields in array$..id- allidfields anywhere (recursive)$[0:3]- array slice
§Example
use clawspec_core::redact_value;
use serde_json::json;
let openapi_json = json!({
"paths": {
"/users": {
"get": {
"responses": {
"200": {
"content": {
"application/json": {
"example": {
"id": "real-uuid",
"created_at": "2024-12-28T10:30:00Z"
}
}
}
}
}
}
}
}
});
let stabilized = redact_value(openapi_json)
.redact("$..example.id", "ENTITY_ID").unwrap()
.redact("$..example.created_at", "TIMESTAMP").unwrap()
.finish();Implementations§
Source§impl ValueRedactionBuilder
impl ValueRedactionBuilder
Sourcepub fn redact<R: Redactor>(
self,
path: &str,
redactor: R,
) -> Result<Self, ApiClientError>
pub fn redact<R: Redactor>( self, path: &str, redactor: R, ) -> Result<Self, ApiClientError>
Redacts values at the specified path using a redactor.
The path can be either JSON Pointer (RFC 6901) or JSONPath (RFC 9535). The syntax is auto-detected based on the prefix:
$...→ JSONPath (supports wildcards)/...→ JSON Pointer (exact path)
The redactor can be:
- A static value:
"replacement"orserde_json::json!(...) - A closure:
|path, val| transform(path, val)
§Arguments
path- Path expression (e.g.,/id,$.items[*].id)redactor- The redactor to apply (static value or closure)
§Errors
Returns an error if:
- The path is invalid
- The path matches no values
§Example
use clawspec_core::redact_value;
use serde_json::json;
let value = json!({"id": "uuid-123", "name": "Test"});
// Static value
let redacted = redact_value(value)
.redact("/id", "stable-uuid").unwrap()
.finish();
assert_eq!(redacted["id"], "stable-uuid");Sourcepub fn redact_with_options<R: Redactor>(
self,
path: &str,
redactor: R,
options: RedactOptions,
) -> Result<Self, ApiClientError>
pub fn redact_with_options<R: Redactor>( self, path: &str, redactor: R, options: RedactOptions, ) -> Result<Self, ApiClientError>
Redacts values at the specified path with configurable options.
This is like redact but allows customizing
behavior through RedactOptions.
§Arguments
path- Path expression (e.g.,/id,$.items[*].id)redactor- The redactor to applyoptions- Configuration options
§Example
use clawspec_core::{redact_value, RedactOptions};
use serde_json::json;
let value = json!({"id": "test"});
// Allow empty matches for optional fields
let options = RedactOptions { allow_empty_match: true };
let redacted = redact_value(value)
.redact_with_options("$.optional_field", "value", options).unwrap()
.finish();Sourcepub fn redact_remove(self, path: &str) -> Result<Self, ApiClientError>
pub fn redact_remove(self, path: &str) -> Result<Self, ApiClientError>
Removes values at the specified path.
This completely removes the field from objects or the element from arrays,
unlike setting it to null.
The path can be either JSON Pointer (RFC 6901) or JSONPath (RFC 9535).
§Arguments
path- Path expression to remove
§Errors
Returns an error if:
- The path is invalid
- The path matches no values
§Example
use clawspec_core::redact_value;
use serde_json::json;
let value = json!({"id": "keep", "secret": "remove"});
let redacted = redact_value(value)
.redact_remove("/secret").unwrap()
.finish();
assert!(redacted.get("secret").is_none());
assert_eq!(redacted["id"], "keep");Sourcepub fn redact_remove_with(
self,
path: &str,
options: RedactOptions,
) -> Result<Self, ApiClientError>
pub fn redact_remove_with( self, path: &str, options: RedactOptions, ) -> Result<Self, ApiClientError>
Removes values at the specified path with configurable options.
This is like redact_remove but allows customizing
behavior through RedactOptions.
§Arguments
path- Path expression to removeoptions- Configuration options
§Example
use clawspec_core::{redact_value, RedactOptions};
use serde_json::json;
let value = json!({"id": "test"});
// Allow empty matches for optional fields
let options = RedactOptions { allow_empty_match: true };
let redacted = redact_value(value)
.redact_remove_with("$.optional_field", options).unwrap()
.finish();Trait Implementations§
Source§impl Clone for ValueRedactionBuilder
impl Clone for ValueRedactionBuilder
Source§fn clone(&self) -> ValueRedactionBuilder
fn clone(&self) -> ValueRedactionBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more