Simplify the code

This commit is contained in:
moznion
2020-11-25 01:10:28 +09:00
parent 5d5d1dbf68
commit 426b2faf53
2 changed files with 94 additions and 85 deletions

View File

@@ -121,27 +121,31 @@ fn generate_attributes_code(w: &mut BufWriter<File>, attrs: &[RadiusAttribute])
fn generate_attribute_code(w: &mut BufWriter<File>, 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<File>, attr: &RadiusAttribute) {
fn generate_common_attribute_code(w: &mut BufWriter<File>, 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<File>, 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<File>, attr: &RadiusAttribute) {
let attr_name = attr.name.clone();
@@ -169,27 +191,14 @@ fn generate_user_password_attribute_code(w: &mut BufWriter<File>, 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();

View File

@@ -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);
}
}