pub struct ValidationSection {
pub enforce_input_schema: bool,
pub default_max_length: u64,
pub additional_properties: bool,
pub strict: bool,
}Expand description
[server.validation] — how strictly a config-declared tool’s inputs are
enforced (Phase 128, D3 / D-06 / D-07).
Every field here is an OPT-OUT knob, and every active opt-out is reported by
ServerConfig::lint and by ServerConfig::validation_report so it appears
in the startup log. That is deliberate: a validation rule switched off by a
configuration value must never read as switched on.
§Forward incompatibility (D-15)
ServerSection and ServerConfig both carry
#[serde(deny_unknown_fields)], so a config carrying a [server.validation]
section fails to PARSE on toolkit 0.1.3 rather than having the section ignored.
Named in the CHANGELOG, exactly as the ParamDecl D2 keys are.
§Examples
use pmcp_server_toolkit::config::ValidationSection;
let v = ValidationSection::default();
assert!(v.enforce_input_schema);
assert_eq!(v.default_max_length, 256);
assert!(!v.additional_properties);
assert!(!v.strict);Fields§
§enforce_input_schema: boolWhether a declared inputSchema is CHECKED at tools/call time.
The checker is pmcp::server::schema_validation::validate_input, called
from the ValidatingToolHandler decorator in crate::tools — in THIS
crate, before the backend call. Not core pmcp’s tools/call dispatch,
which does not validate request arguments against a declared inputSchema
(Phase 128 D-01 defers that wiring). Naming the enforcer is this phase’s
SC-6 convention; the sweep that produced it found the unqualified form of
this sentence three times in tools.rs alone.
Default true. Setting it false skips the schema check only — it does
NOT disable an explicitly-registered argument validator. Turning off one
enforcement must never silently turn off another, so the two live on
separate switches and the decorator is still constructed whenever a
validator is registered for the tool.
default_max_length: u64Default maxLength, in Unicode code points, emitted for a PATH- or
QUERY-position string parameter that declares no max_length of its own
(D-06).
Default 256. A declared max_length is never overridden and never merged
with this value. Body-position strings are deliberately NOT capped by it
(D-05) — they are surfaced by ServerConfig::lint instead.
0 DISABLES the cap in every position and is reported as an active opt-out.
It does not disable pmcp::server::schema_validation::PLACEHOLDER_MAX_LENGTH,
which is a module constant precisely so the length half of the path-traversal
fix cannot be configured away (D-08).
additional_properties: boolWhether to permit UNDECLARED arguments, by emitting
additionalProperties: true instead of false.
Default false (unknown arguments are refused). true re-opens the
unknown-argument class for this server and is reported as an active opt-out.
strict: boolWhether ServerConfig::lint findings are promoted into hard
ServerConfig::validate failures.
Default false: a running server never refuses to boot over an uncapped
free-text body parameter (D-07). true turns each such parameter into
ConfigValidationError::UncappedStringParam, which is what a CI config
check wants and what a production boot does not.
Trait Implementations§
Source§impl Clone for ValidationSection
impl Clone for ValidationSection
Source§impl Debug for ValidationSection
impl Debug for ValidationSection
Source§impl Default for ValidationSection
impl Default for ValidationSection
Source§impl<'de> Deserialize<'de> for ValidationSection
impl<'de> Deserialize<'de> for ValidationSection
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for ValidationSection
Source§impl PartialEq for ValidationSection
impl PartialEq for ValidationSection
Source§impl Serialize for ValidationSection
impl Serialize for ValidationSection
impl StructuralPartialEq for ValidationSection
Auto Trait Implementations§
impl Freeze for ValidationSection
impl RefUnwindSafe for ValidationSection
impl Send for ValidationSection
impl Sync for ValidationSection
impl Unpin for ValidationSection
impl UnsafeUnpin for ValidationSection
impl UnwindSafe for ValidationSection
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more