From 22d0182c847bad099327220138e672629c7cda9d Mon Sep 17 00:00:00 2001 From: fewensa Date: Sat, 12 Sep 2026 14:17:31 +0800 Subject: [PATCH 1/2] Export SaveData facades codeon: version: 1 authority: FWN-375 description: |- Export SaveData and SaveDataParseError through rttp_client and the client-enabled rttp facade. Add focused metadata facade assertions covering SaveData::parse("on") success and SaveData::parse("?1") failure through both public facade paths. --- crates/rttp-client/src/lib.rs | 1 + crates/rttp-client/tests/metadata_facade.rs | 10 +++++++--- crates/rttp/src/lib.rs | 4 ++-- crates/rttp/tests/metadata_facade.rs | 4 ++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/crates/rttp-client/src/lib.rs b/crates/rttp-client/src/lib.rs index e89deab2..81b17a1c 100644 --- a/crates/rttp-client/src/lib.rs +++ b/crates/rttp-client/src/lib.rs @@ -151,6 +151,7 @@ pub use rttp_protocol::negotiate::{Negotiate, NegotiateDirective, NegotiateParse pub use rttp_protocol::overwrite::{Overwrite, OverwriteParseError}; pub use rttp_protocol::referer::{Referer, RefererParseError}; pub use rttp_protocol::schedule_tag::{ScheduleTag, ScheduleTagParseError}; +pub use rttp_protocol::save_data::{SaveData, SaveDataParseError}; pub use rttp_protocol::sec_gpc::{SecGpc, SecGpcParseError}; pub use rttp_protocol::sec_required_document_policy::{ SecRequiredDocumentPolicy, SecRequiredDocumentPolicyDirective, diff --git a/crates/rttp-client/tests/metadata_facade.rs b/crates/rttp-client/tests/metadata_facade.rs index b94628ca..87c28f48 100644 --- a/crates/rttp-client/tests/metadata_facade.rs +++ b/crates/rttp-client/tests/metadata_facade.rs @@ -49,9 +49,9 @@ use rttp_client::{ DestinationParseError, Dnt, DntParseError, Expect, ExpectParseError, From, FromParseError, HttpClient, If, IfCondition, IfList, IfParseError, IfPredicate, IfResourceTag, IfScheduleTagMatch, IfScheduleTagMatchParseError, IfStateToken, Negotiate, NegotiateDirective, - NegotiateParseError, Overwrite, OverwriteParseError, SecFetchDest, SecFetchMode, SecFetchSite, - SecFetchUser, SecGpc, SecGpcParseError, SecPurpose, SecRequiredDocumentPolicy, - SecRequiredDocumentPolicyDirective, SecRequiredDocumentPolicyParseError, + NegotiateParseError, Overwrite, OverwriteParseError, SaveData, SaveDataParseError, + SecFetchDest, SecFetchMode, SecFetchSite, SecFetchUser, SecGpc, SecGpcParseError, SecPurpose, + SecRequiredDocumentPolicy, SecRequiredDocumentPolicyDirective, SecRequiredDocumentPolicyParseError, SecRequiredDocumentPolicyValue, SecWebSocketKey, SecWebSocketKeyParseError, Tcn, TcnDirective, TcnParseError, Timeout, TimeoutParseError, TimeoutType, TraceParent, TraceParentParseError, TraceState, TraceStateMember, TraceStateParseError, UpgradeInsecureRequests, @@ -400,6 +400,10 @@ fn response_facade_exports_representative_bounded_metadata_types() { let fetch_user = SecFetchUser::parse("?1").expect("Sec-Fetch-User should parse"); let dnt = Dnt::parse("1").expect("DNT should parse"); let _: DntParseError = Dnt::parse("on").expect_err("invalid DNT should be rejected"); + let save_data = SaveData::parse("on").expect("Save-Data should parse"); + assert_eq!("on", save_data.header_value()); + let _: SaveDataParseError = + SaveData::parse("?1").expect_err("structured boolean Save-Data should be rejected"); let sec_gpc = SecGpc::parse("1").expect("Sec-GPC should parse"); let _: SecGpcParseError = SecGpc::parse("0").expect_err("invalid Sec-GPC should be rejected"); let sec_required_document_policy = diff --git a/crates/rttp/src/lib.rs b/crates/rttp/src/lib.rs index ed983881..20428c48 100644 --- a/crates/rttp/src/lib.rs +++ b/crates/rttp/src/lib.rs @@ -61,8 +61,8 @@ pub use rttp_client::{ IfCondition, IfList, IfParseError, IfPredicate, IfResourceTag, IfScheduleTagMatch, IfScheduleTagMatchParseError, IfStateToken, LockToken, LockTokenParseError, Negotiate, NegotiateDirective, NegotiateParseError, Overwrite, OverwriteParseError, Referer, - RefererParseError, SecFetchDest, SecFetchMode, SecFetchSite, SecFetchUser, SecPurpose, - SecRequiredDocumentPolicy, SecRequiredDocumentPolicyDirective, + RefererParseError, SaveData, SaveDataParseError, SecFetchDest, SecFetchMode, SecFetchSite, + SecFetchUser, SecPurpose, SecRequiredDocumentPolicy, SecRequiredDocumentPolicyDirective, SecRequiredDocumentPolicyParseError, SecRequiredDocumentPolicyValue, SecWebSocketKey, SecWebSocketKeyParseError, Timeout, TimeoutParseError, TimeoutType, TraceParent, TraceParentParseError, TraceState, TraceStateMember, TraceStateParseError, UserAgent, diff --git a/crates/rttp/tests/metadata_facade.rs b/crates/rttp/tests/metadata_facade.rs index dfb27ac8..94f31a27 100644 --- a/crates/rttp/tests/metadata_facade.rs +++ b/crates/rttp/tests/metadata_facade.rs @@ -527,6 +527,10 @@ fn compatibility_facade_exports_client_metadata_types() { let dnt: rttp::Dnt = rttp_client::Dnt::parse("1").expect("DNT should parse"); let _: rttp::DntParseError = rttp_client::Dnt::parse("on").expect_err("invalid DNT should be rejected"); + let save_data: rttp::SaveData = rttp::SaveData::parse("on").expect("Save-Data should parse"); + assert_eq!("on", save_data.header_value()); + let _: rttp::SaveDataParseError = + rttp::SaveData::parse("?1").expect_err("structured boolean Save-Data should fail"); let sec_required_document_policy: rttp::SecRequiredDocumentPolicy = rttp_client::SecRequiredDocumentPolicy::parse( "oversized-images=2.0, unsized-media=?0, *;report-to=default", From 9772474b204821941e3220f2f03980d8979a4bcb Mon Sep 17 00:00:00 2001 From: fewensa Date: Sat, 12 Sep 2026 20:04:32 +0800 Subject: [PATCH 2/2] Format SaveData facade exports codeon: version: 1 authority: FWN-375 description: |- Apply repository rustfmt ordering and wrapping to the SaveData facade exports and metadata facade test imports. This resolves the sealed rustfmt validation finding without changing behavior. --- crates/rttp-client/src/lib.rs | 2 +- crates/rttp-client/tests/metadata_facade.rs | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/crates/rttp-client/src/lib.rs b/crates/rttp-client/src/lib.rs index 81b17a1c..af5cd003 100644 --- a/crates/rttp-client/src/lib.rs +++ b/crates/rttp-client/src/lib.rs @@ -150,8 +150,8 @@ pub use rttp_protocol::lock_token::{LockToken, LockTokenParseError}; pub use rttp_protocol::negotiate::{Negotiate, NegotiateDirective, NegotiateParseError}; pub use rttp_protocol::overwrite::{Overwrite, OverwriteParseError}; pub use rttp_protocol::referer::{Referer, RefererParseError}; -pub use rttp_protocol::schedule_tag::{ScheduleTag, ScheduleTagParseError}; pub use rttp_protocol::save_data::{SaveData, SaveDataParseError}; +pub use rttp_protocol::schedule_tag::{ScheduleTag, ScheduleTagParseError}; pub use rttp_protocol::sec_gpc::{SecGpc, SecGpcParseError}; pub use rttp_protocol::sec_required_document_policy::{ SecRequiredDocumentPolicy, SecRequiredDocumentPolicyDirective, diff --git a/crates/rttp-client/tests/metadata_facade.rs b/crates/rttp-client/tests/metadata_facade.rs index 87c28f48..91a506ba 100644 --- a/crates/rttp-client/tests/metadata_facade.rs +++ b/crates/rttp-client/tests/metadata_facade.rs @@ -49,15 +49,16 @@ use rttp_client::{ DestinationParseError, Dnt, DntParseError, Expect, ExpectParseError, From, FromParseError, HttpClient, If, IfCondition, IfList, IfParseError, IfPredicate, IfResourceTag, IfScheduleTagMatch, IfScheduleTagMatchParseError, IfStateToken, Negotiate, NegotiateDirective, - NegotiateParseError, Overwrite, OverwriteParseError, SaveData, SaveDataParseError, - SecFetchDest, SecFetchMode, SecFetchSite, SecFetchUser, SecGpc, SecGpcParseError, SecPurpose, - SecRequiredDocumentPolicy, SecRequiredDocumentPolicyDirective, SecRequiredDocumentPolicyParseError, - SecRequiredDocumentPolicyValue, SecWebSocketKey, SecWebSocketKeyParseError, Tcn, TcnDirective, - TcnParseError, Timeout, TimeoutParseError, TimeoutType, TraceParent, TraceParentParseError, - TraceState, TraceStateMember, TraceStateParseError, UpgradeInsecureRequests, - UpgradeInsecureRequestsParseError, UserAgent, UserAgentMember, UserAgentParseError, - Via as ClientVia, ViaParseError as ClientViaParseError, XForwardedFor, XForwardedForParseError, - XForwardedHost, XForwardedHostParseError, XForwardedProto, XForwardedProtoParseError, + NegotiateParseError, Overwrite, OverwriteParseError, SaveData, SaveDataParseError, SecFetchDest, + SecFetchMode, SecFetchSite, SecFetchUser, SecGpc, SecGpcParseError, SecPurpose, + SecRequiredDocumentPolicy, SecRequiredDocumentPolicyDirective, + SecRequiredDocumentPolicyParseError, SecRequiredDocumentPolicyValue, SecWebSocketKey, + SecWebSocketKeyParseError, Tcn, TcnDirective, TcnParseError, Timeout, TimeoutParseError, + TimeoutType, TraceParent, TraceParentParseError, TraceState, TraceStateMember, + TraceStateParseError, UpgradeInsecureRequests, UpgradeInsecureRequestsParseError, UserAgent, + UserAgentMember, UserAgentParseError, Via as ClientVia, ViaParseError as ClientViaParseError, + XForwardedFor, XForwardedForParseError, XForwardedHost, XForwardedHostParseError, + XForwardedProto, XForwardedProtoParseError, }; use rttp_test_support as support;