diff --git a/src/bin/code_gen.rs b/src/bin/code_gen.rs index b05d7fe..7617149 100644 --- a/src/bin/code_gen.rs +++ b/src/bin/code_gen.rs @@ -121,27 +121,31 @@ fn generate_attributes_code(w: &mut BufWriter, attrs: &[RadiusAttribute]) fn generate_attribute_code(w: &mut BufWriter, attr: &RadiusAttribute) { match attr.value_type { - RadiusAttributeValueType::STRING => generate_string_attribute_code(w, attr), - RadiusAttributeValueType::USER_PASSWORD => generate_user_password_attribute_code(w, attr), - RadiusAttributeValueType::OCTETS => generate_octets_attribute_code(w, attr), - RadiusAttributeValueType::IPADDR => generate_ipaddr_attribute_code(w, attr), - RadiusAttributeValueType::INTEGER => generate_integer_attribute_code(w, attr), - RadiusAttributeValueType::VSA => generate_vsa_attribute_code(w, attr), + RadiusAttributeValueType::STRING => { + generate_common_attribute_code(w, attr); + generate_string_attribute_code(w, attr) + } + RadiusAttributeValueType::USER_PASSWORD => { + generate_common_attribute_code(w, attr); + generate_user_password_attribute_code(w, attr) + } + // RadiusAttributeValueType::OCTETS => generate_octets_attribute_code(w, attr), + // RadiusAttributeValueType::IPADDR => generate_ipaddr_attribute_code(w, attr), + // RadiusAttributeValueType::INTEGER => generate_integer_attribute_code(w, attr), + // RadiusAttributeValueType::VSA => generate_vsa_attribute_code(w, attr), + _ => {} } } -fn generate_string_attribute_code(w: &mut BufWriter, attr: &RadiusAttribute) { +fn generate_common_attribute_code(w: &mut BufWriter, attr: &RadiusAttribute) { let attr_name = attr.name.clone(); let type_identifier = format!("{}_TYPE", attr_name.to_screaming_snake_case()); let type_calling = format!("Self::{}", type_identifier); let code = format!( - "pub const {type_identifier}: AVPType = {type_value}; -pub fn add_{method_identifier}(packet: &mut Packet, value: &str) {{ - let attr = Attribute::from_string(value); - packet.add({type_calling}, &attr); -}} + " +pub const {type_identifier}: AVPType = {type_value}; pub fn delete_{method_identifier}(packet: &mut Packet) {{ packet.delete({type_calling}); }} @@ -151,7 +155,6 @@ pub fn lookup_{method_identifier}(packet: &Packet) -> Option<&Attribute> {{ pub fn lookup_all_{method_identifier}(packet: &Packet) -> Vec<&Attribute> {{ packet.lookup_all({type_calling}) }} - ", method_identifier = attr_name.to_snake_case(), type_identifier = type_identifier, @@ -162,6 +165,25 @@ pub fn lookup_all_{method_identifier}(packet: &Packet) -> Vec<&Attribute> {{ w.write_all(code.as_bytes()).unwrap(); } +fn generate_string_attribute_code(w: &mut BufWriter, attr: &RadiusAttribute) { + let attr_name = attr.name.clone(); + + let type_identifier = format!("{}_TYPE", attr_name.to_screaming_snake_case()); + let type_calling = format!("Self::{}", type_identifier); + + let code = format!( + "pub fn add_{method_identifier}(packet: &mut Packet, value: &str) {{ + let attr = Attribute::from_string(value); + packet.add({type_calling}, &attr); +}} +", + method_identifier = attr_name.to_snake_case(), + type_calling = type_calling, + ); + + w.write_all(code.as_bytes()).unwrap(); +} + fn generate_user_password_attribute_code(w: &mut BufWriter, attr: &RadiusAttribute) { let attr_name = attr.name.clone(); @@ -169,27 +191,14 @@ fn generate_user_password_attribute_code(w: &mut BufWriter, attr: &RadiusA let type_calling = format!("Self::{}", type_identifier); let code = format!( - "pub const {type_identifier}: AVPType = {type_value}; -pub fn add_{method_identifier}(packet: &mut Packet, value: &[u8]) -> Result<(), String> {{ + "pub fn add_{method_identifier}(packet: &mut Packet, value: &[u8]) -> Result<(), String> {{ let attr = Attribute::from_user_password(value, packet.get_secret(), packet.get_authenticator())?; packet.add({type_calling}, &attr); Ok(()) }} -pub fn delete_{method_identifier}(packet: &mut Packet) {{ - packet.delete({type_calling}); -}} -pub fn lookup_{method_identifier}(packet: &Packet) -> Option<&Attribute> {{ - packet.lookup({type_calling}) -}} -pub fn lookup_all_{method_identifier}(packet: &Packet) -> Vec<&Attribute> {{ - packet.lookup_all({type_calling}) -}} - ", method_identifier = attr_name.to_snake_case(), - type_identifier = type_identifier, type_calling = type_calling, - type_value = attr.typ, ); w.write_all(code.as_bytes()).unwrap(); diff --git a/src/rfc2865.rs b/src/rfc2865.rs index 64985bc..a56a034 100644 --- a/src/rfc2865.rs +++ b/src/rfc2865.rs @@ -7,10 +7,6 @@ use crate::packet::Packet; pub struct RFC2865 {} impl RFC2865 { pub const USER_NAME_TYPE: AVPType = 1; - pub fn add_user_name(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::USER_NAME_TYPE, &attr); - } pub fn delete_user_name(packet: &mut Packet) { packet.delete(Self::USER_NAME_TYPE); } @@ -20,14 +16,12 @@ impl RFC2865 { pub fn lookup_all_user_name(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::USER_NAME_TYPE) } + pub fn add_user_name(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::USER_NAME_TYPE, &attr); + } pub const USER_PASSWORD_TYPE: AVPType = 2; - pub fn add_user_password(packet: &mut Packet, value: &[u8]) -> Result<(), String> { - let attr = - Attribute::from_user_password(value, packet.get_secret(), packet.get_authenticator())?; - packet.add(Self::USER_PASSWORD_TYPE, &attr); - Ok(()) - } pub fn delete_user_password(packet: &mut Packet) { packet.delete(Self::USER_PASSWORD_TYPE); } @@ -37,12 +31,14 @@ impl RFC2865 { pub fn lookup_all_user_password(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::USER_PASSWORD_TYPE) } + pub fn add_user_password(packet: &mut Packet, value: &[u8]) -> Result<(), String> { + let attr = + Attribute::from_user_password(value, packet.get_secret(), packet.get_authenticator())?; + packet.add(Self::USER_PASSWORD_TYPE, &attr); + Ok(()) + } pub const FILTER_ID_TYPE: AVPType = 11; - pub fn add_filter_id(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::FILTER_ID_TYPE, &attr); - } pub fn delete_filter_id(packet: &mut Packet) { packet.delete(Self::FILTER_ID_TYPE); } @@ -52,12 +48,12 @@ impl RFC2865 { pub fn lookup_all_filter_id(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::FILTER_ID_TYPE) } + pub fn add_filter_id(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::FILTER_ID_TYPE, &attr); + } pub const REPLY_MESSAGE_TYPE: AVPType = 18; - pub fn add_reply_message(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::REPLY_MESSAGE_TYPE, &attr); - } pub fn delete_reply_message(packet: &mut Packet) { packet.delete(Self::REPLY_MESSAGE_TYPE); } @@ -67,12 +63,12 @@ impl RFC2865 { pub fn lookup_all_reply_message(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::REPLY_MESSAGE_TYPE) } + pub fn add_reply_message(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::REPLY_MESSAGE_TYPE, &attr); + } pub const CALLBACK_NUMBER_TYPE: AVPType = 19; - pub fn add_callback_number(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::CALLBACK_NUMBER_TYPE, &attr); - } pub fn delete_callback_number(packet: &mut Packet) { packet.delete(Self::CALLBACK_NUMBER_TYPE); } @@ -82,12 +78,12 @@ impl RFC2865 { pub fn lookup_all_callback_number(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::CALLBACK_NUMBER_TYPE) } + pub fn add_callback_number(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::CALLBACK_NUMBER_TYPE, &attr); + } pub const CALLBACK_ID_TYPE: AVPType = 20; - pub fn add_callback_id(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::CALLBACK_ID_TYPE, &attr); - } pub fn delete_callback_id(packet: &mut Packet) { packet.delete(Self::CALLBACK_ID_TYPE); } @@ -97,12 +93,12 @@ impl RFC2865 { pub fn lookup_all_callback_id(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::CALLBACK_ID_TYPE) } + pub fn add_callback_id(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::CALLBACK_ID_TYPE, &attr); + } pub const FRAMED_ROUTE_TYPE: AVPType = 22; - pub fn add_framed_route(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::FRAMED_ROUTE_TYPE, &attr); - } pub fn delete_framed_route(packet: &mut Packet) { packet.delete(Self::FRAMED_ROUTE_TYPE); } @@ -112,12 +108,12 @@ impl RFC2865 { pub fn lookup_all_framed_route(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::FRAMED_ROUTE_TYPE) } + pub fn add_framed_route(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::FRAMED_ROUTE_TYPE, &attr); + } pub const CALLED_STATION_ID_TYPE: AVPType = 30; - pub fn add_called_station_id(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::CALLED_STATION_ID_TYPE, &attr); - } pub fn delete_called_station_id(packet: &mut Packet) { packet.delete(Self::CALLED_STATION_ID_TYPE); } @@ -127,12 +123,12 @@ impl RFC2865 { pub fn lookup_all_called_station_id(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::CALLED_STATION_ID_TYPE) } + pub fn add_called_station_id(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::CALLED_STATION_ID_TYPE, &attr); + } pub const CALLING_STATION_ID_TYPE: AVPType = 31; - pub fn add_calling_station_id(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::CALLING_STATION_ID_TYPE, &attr); - } pub fn delete_calling_station_id(packet: &mut Packet) { packet.delete(Self::CALLING_STATION_ID_TYPE); } @@ -142,12 +138,12 @@ impl RFC2865 { pub fn lookup_all_calling_station_id(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::CALLING_STATION_ID_TYPE) } + pub fn add_calling_station_id(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::CALLING_STATION_ID_TYPE, &attr); + } pub const NAS_IDENTIFIER_TYPE: AVPType = 32; - pub fn add_nas_identifier(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::NAS_IDENTIFIER_TYPE, &attr); - } pub fn delete_nas_identifier(packet: &mut Packet) { packet.delete(Self::NAS_IDENTIFIER_TYPE); } @@ -157,12 +153,12 @@ impl RFC2865 { pub fn lookup_all_nas_identifier(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::NAS_IDENTIFIER_TYPE) } + pub fn add_nas_identifier(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::NAS_IDENTIFIER_TYPE, &attr); + } pub const LOGIN_LAT_SERVICE_TYPE: AVPType = 34; - pub fn add_login_lat_service(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::LOGIN_LAT_SERVICE_TYPE, &attr); - } pub fn delete_login_lat_service(packet: &mut Packet) { packet.delete(Self::LOGIN_LAT_SERVICE_TYPE); } @@ -172,12 +168,12 @@ impl RFC2865 { pub fn lookup_all_login_lat_service(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::LOGIN_LAT_SERVICE_TYPE) } + pub fn add_login_lat_service(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::LOGIN_LAT_SERVICE_TYPE, &attr); + } pub const LOGIN_LAT_NODE_TYPE: AVPType = 35; - pub fn add_login_lat_node(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::LOGIN_LAT_NODE_TYPE, &attr); - } pub fn delete_login_lat_node(packet: &mut Packet) { packet.delete(Self::LOGIN_LAT_NODE_TYPE); } @@ -187,12 +183,12 @@ impl RFC2865 { pub fn lookup_all_login_lat_node(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::LOGIN_LAT_NODE_TYPE) } + pub fn add_login_lat_node(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::LOGIN_LAT_NODE_TYPE, &attr); + } pub const FRAMED_APPLE_TALK_ZONE_TYPE: AVPType = 39; - pub fn add_framed_apple_talk_zone(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::FRAMED_APPLE_TALK_ZONE_TYPE, &attr); - } pub fn delete_framed_apple_talk_zone(packet: &mut Packet) { packet.delete(Self::FRAMED_APPLE_TALK_ZONE_TYPE); } @@ -202,12 +198,12 @@ impl RFC2865 { pub fn lookup_all_framed_apple_talk_zone(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::FRAMED_APPLE_TALK_ZONE_TYPE) } + pub fn add_framed_apple_talk_zone(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::FRAMED_APPLE_TALK_ZONE_TYPE, &attr); + } pub const LOGIN_LAT_PORT_TYPE: AVPType = 63; - pub fn add_login_lat_port(packet: &mut Packet, value: &str) { - let attr = Attribute::from_string(value); - packet.add(Self::LOGIN_LAT_PORT_TYPE, &attr); - } pub fn delete_login_lat_port(packet: &mut Packet) { packet.delete(Self::LOGIN_LAT_PORT_TYPE); } @@ -217,4 +213,8 @@ impl RFC2865 { pub fn lookup_all_login_lat_port(packet: &Packet) -> Vec<&Attribute> { packet.lookup_all(Self::LOGIN_LAT_PORT_TYPE) } + pub fn add_login_lat_port(packet: &mut Packet, value: &str) { + let attr = Attribute::from_string(value); + packet.add(Self::LOGIN_LAT_PORT_TYPE, &attr); + } }