use http2::client::Builder;
use http2::frame::{PseudoId, PseudoOrder, SettingId, SettingsOrder, StreamDependency, StreamId};
use crate::profile::Http2Profile;
use crate::profile::PseudoOrder as QuikPseudoOrder;
pub fn configure_builder(builder: &mut Builder, profile: &Http2Profile) {
let mut settings_order = SettingsOrder::builder();
settings_order = settings_order.push(SettingId::HeaderTableSize); settings_order = settings_order.push(SettingId::EnablePush); settings_order = settings_order.push(SettingId::InitialWindowSize); settings_order = settings_order.push(SettingId::MaxHeaderListSize); builder.settings_order(settings_order.build());
builder.header_table_size(profile.settings.header_table_size);
builder.enable_push(profile.settings.enable_push);
builder.initial_window_size(profile.settings.initial_window_size);
builder.max_header_list_size(profile.settings.max_header_list_size);
builder.initial_connection_window_size(profile.initial_connection_window_size);
let mut pseudo_order = PseudoOrder::builder();
for id in &profile.pseudo_order {
match id {
QuikPseudoOrder::Method => {
pseudo_order = pseudo_order.push(PseudoId::Method);
}
QuikPseudoOrder::Authority => {
pseudo_order = pseudo_order.push(PseudoId::Authority);
}
QuikPseudoOrder::Scheme => {
pseudo_order = pseudo_order.push(PseudoId::Scheme);
}
QuikPseudoOrder::Path => {
pseudo_order = pseudo_order.push(PseudoId::Path);
}
}
}
builder.headers_pseudo_order(pseudo_order.build());
builder.headers_stream_dependency(StreamDependency::new(
StreamId::ZERO,
profile.headers_priority.weight,
profile.headers_priority.exclusive,
));
}