Skip to content

Commit

Permalink
feat(frame/settings): Packaging settings type (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
0x676e67 authored Aug 15, 2024
1 parent 91be452 commit 50acb7a
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 23 deletions.
4 changes: 2 additions & 2 deletions src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
50 changes: 29 additions & 21 deletions src/frame/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -21,7 +39,7 @@ pub struct Settings {
max_header_list_size: Option<u32>,
enable_connect_protocol: Option<u32>,
// Fields for the settings frame order
settings_order: Option<[SettingsOrder; 2]>,
settings_orders: Option<SettingsOrders>,
}

/// An enum that lists all valid settings that can be sent in a SETTINGS
Expand Down Expand Up @@ -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<Settings, Error> {
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit 50acb7a

Please sign in to comment.