use rasn::prelude::*;
use crate::types::IsdnAddressString;
pub type SsCode = OctetString;
#[derive(Debug, Clone, PartialEq, Eq, AsnType, Decode, Encode)]
#[rasn(choice)]
pub enum BasicServiceCode {
#[rasn(tag(context, 2))]
BearerService(OctetString),
#[rasn(tag(context, 3))]
Teleservice(OctetString),
}
pub type SsStatus = OctetString;
#[derive(Debug, Clone, PartialEq, Eq, AsnType, Decode, Encode)]
pub struct ForwardingFeature {
pub basic_service: Option<BasicServiceCode>,
#[rasn(tag(context, 4))]
pub ss_status: Option<SsStatus>,
#[rasn(tag(context, 5))]
pub forwarded_to_number: Option<IsdnAddressString>,
#[rasn(tag(context, 7))]
pub no_reply_condition_time: Option<Integer>,
}
#[derive(Debug, Clone, PartialEq, Eq, AsnType, Decode, Encode)]
pub struct RegisterSsArg {
pub ss_code: SsCode,
pub basic_service: Option<BasicServiceCode>,
pub forwarded_to_number: Option<IsdnAddressString>,
#[rasn(tag(context, 4))]
pub no_reply_condition_time: Option<Integer>,
}
#[derive(Debug, Clone, PartialEq, Eq, AsnType, Decode, Encode)]
pub struct EraseSsArg {
pub ss_code: SsCode,
pub basic_service: Option<BasicServiceCode>,
}
#[derive(Debug, Clone, PartialEq, Eq, AsnType, Decode, Encode)]
pub struct ActivateSsArg {
pub ss_code: SsCode,
pub basic_service: Option<BasicServiceCode>,
}
#[derive(Debug, Clone, PartialEq, Eq, AsnType, Decode, Encode)]
pub struct DeactivateSsArg {
pub ss_code: SsCode,
pub basic_service: Option<BasicServiceCode>,
}
#[derive(Debug, Clone, PartialEq, Eq, AsnType, Decode, Encode)]
pub struct InterrogateSsArg {
pub ss_code: SsCode,
pub basic_service: Option<BasicServiceCode>,
}
#[derive(Debug, Clone, PartialEq, Eq, AsnType, Decode, Encode)]
#[rasn(choice)]
pub enum InterrogateSsRes {
#[rasn(tag(context, 0))]
SsStatus(SsStatus),
#[rasn(tag(context, 2))]
ForwardingFeatureList(Vec<ForwardingFeature>),
#[rasn(tag(context, 3))]
GenericServiceInfo(OctetString),
}
pub mod op_codes {
pub const REGISTER_SS: i64 = 10;
pub const ERASE_SS: i64 = 11;
pub const ACTIVATE_SS: i64 = 12;
pub const DEACTIVATE_SS: i64 = 13;
pub const INTERROGATE_SS: i64 = 14;
}