From 50acb7a7001611f34ce2a96392e6b06123ca3ceb Mon Sep 17 00:00:00 2001 From: 0x676e67 Date: Thu, 15 Aug 2024 09:31:50 +0800 Subject: [PATCH] feat(frame/settings): Packaging settings type (#9) --- src/client.rs | 4 ++-- src/frame/settings.rs | 50 +++++++++++++++++++++++++------------------ 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/client.rs b/src/client.rs index 4e7b62e..6023a31 100644 --- a/src/client.rs +++ b/src/client.rs @@ -678,8 +678,8 @@ impl Builder { } /// Set http2 header pseudo order - pub fn headers_psuedo(&mut self, headers_psuedo: [PseudoOrder; 4]) -> &mut Self { - self.headers_pseudo_order = Some(headers_psuedo.into()); + pub fn headers_psuedo(&mut self, order: [PseudoOrder; 4]) -> &mut Self { + self.headers_pseudo_order = Some(order.into()); self } diff --git a/src/frame/settings.rs b/src/frame/settings.rs index ff617d9..c136bfc 100644 --- a/src/frame/settings.rs +++ b/src/frame/settings.rs @@ -9,6 +9,24 @@ pub enum SettingsOrder { MaxConcurrentStreams, } +#[derive(Debug, Clone, Copy, Eq, PartialEq)] +pub struct SettingsOrders([SettingsOrder; 2]); + +impl From<[SettingsOrder; 2]> for SettingsOrders { + fn from(order: [SettingsOrder; 2]) -> Self { + SettingsOrders(order) + } +} + +impl Default for SettingsOrders { + fn default() -> Self { + SettingsOrders([ + SettingsOrder::InitialWindowSize, + SettingsOrder::MaxConcurrentStreams, + ]) + } +} + #[derive(Clone, Default, Eq, PartialEq)] pub struct Settings { flags: SettingsFlags, @@ -21,7 +39,7 @@ pub struct Settings { max_header_list_size: Option, enable_connect_protocol: Option, // Fields for the settings frame order - settings_order: Option<[SettingsOrder; 2]>, + settings_orders: Option, } /// An enum that lists all valid settings that can be sent in a SETTINGS @@ -134,7 +152,7 @@ impl Settings { } pub fn set_settings_order(&mut self, order: Option<[SettingsOrder; 2]>) { - self.settings_order = order; + self.settings_orders = order.map(|order| order.into()); } pub fn load(head: Head, payload: &[u8]) -> Result { @@ -249,29 +267,19 @@ impl Settings { f(EnablePush(v)); } - if let Some(settings_frame_order) = self.settings_order { - for order in settings_frame_order { - match order { - SettingsOrder::InitialWindowSize => { - if let Some(v) = self.initial_window_size { - f(InitialWindowSize(v)); - } + for order in self.settings_orders.unwrap_or_default().0.iter() { + match order { + SettingsOrder::InitialWindowSize => { + if let Some(v) = self.initial_window_size { + f(InitialWindowSize(v)); } - SettingsOrder::MaxConcurrentStreams => { - if let Some(v) = self.max_concurrent_streams { - f(MaxConcurrentStreams(v)); - } + } + SettingsOrder::MaxConcurrentStreams => { + if let Some(v) = self.max_concurrent_streams { + f(MaxConcurrentStreams(v)); } } } - } else { - if let Some(v) = self.initial_window_size { - f(InitialWindowSize(v)); - } - - if let Some(v) = self.max_concurrent_streams { - f(MaxConcurrentStreams(v)); - } } if let Some(v) = self.max_frame_size {