Skip to main content

SchemaCache

Struct SchemaCache 

Source
pub struct SchemaCache { /* private fields */ }
Expand description

A thread-safe cache for normalized JSON Schemas.

Stores normalized schemas keyed by a 64-bit hash of the serialized input schema. This avoids re-running normalization transforms on unchanged schemas across repeated generate_content() calls.

§Thread Safety

Uses std::sync::Mutex internally, making it safe to share across threads. The lock is held only briefly during hash lookup and insertion.

§Placement

Intended to live on model instances so each provider adapter maintains its own cache of normalized schemas.

Implementations§

Source§

impl SchemaCache

Source

pub fn new() -> Self

Creates a new empty schema cache.

§Example
use adk_core::SchemaCache;

let cache = SchemaCache::new();
Source

pub fn get_or_normalize( &self, schema: &Value, adapter: &dyn SchemaAdapter, ) -> Value

Returns the normalized schema for the given input, using the cache if available.

If the schema has been normalized before (based on content hash), the cached result is returned. Otherwise, adapter.normalize_schema() is called and the result is stored in the cache.

§Arguments
  • schema - The raw JSON Schema to normalize.
  • adapter - The provider-specific schema adapter to use for normalization.
§Returns

The normalized JSON Schema value.

§Example
use adk_core::{SchemaCache, SchemaAdapter, GenericSchemaAdapter};
use serde_json::json;

let cache = SchemaCache::new();
let adapter = GenericSchemaAdapter;
let schema = json!({"$schema": "draft-07", "type": "string"});

let normalized = cache.get_or_normalize(&schema, &adapter);
assert!(normalized.get("$schema").is_none());
Source

pub fn clear(&self)

Clears all cached entries.

Call this when the set of tools changes (e.g., MCP server advertises updated schemas) to force re-normalization on the next request.

§Example
use adk_core::{SchemaCache, GenericSchemaAdapter};
use serde_json::json;

let cache = SchemaCache::new();
let adapter = GenericSchemaAdapter;
let schema = json!({"type": "string"});

// Populate cache
cache.get_or_normalize(&schema, &adapter);

// Invalidate all entries
cache.clear();
Source

pub fn len(&self) -> usize

Returns the number of cached entries.

Source

pub fn is_empty(&self) -> bool

Returns true if the cache contains no entries.

Trait Implementations§

Source§

impl Debug for SchemaCache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SchemaCache

Source§

fn default() -> SchemaCache

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more