#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GenericFkEncoding {
Nested,
NestedList,
Split,
}
pub const GENERIC_FK_FIELDS: &[(&str, &str, GenericFkEncoding)] = &[
(
"circuits.circuitgroupassignment",
"member",
GenericFkEncoding::Split,
),
(
"circuits.circuittermination",
"termination",
GenericFkEncoding::Split,
),
(
"dcim.cable",
"a_terminations",
GenericFkEncoding::NestedList,
),
(
"dcim.cable",
"b_terminations",
GenericFkEncoding::NestedList,
),
("dcim.inventoryitem", "component", GenericFkEncoding::Split),
(
"dcim.inventoryitemtemplate",
"component",
GenericFkEncoding::Split,
),
(
"dcim.macaddress",
"assigned_object",
GenericFkEncoding::Split,
),
("extras.bookmark", "object", GenericFkEncoding::Split),
(
"extras.eventrule",
"action_object",
GenericFkEncoding::Split,
),
("extras.imageattachment", "object", GenericFkEncoding::Split),
(
"extras.journalentry",
"assigned_object",
GenericFkEncoding::Split,
),
("extras.notification", "object", GenericFkEncoding::Split),
("extras.subscription", "object", GenericFkEncoding::Split),
(
"ipam.fhrpgroupassignment",
"interface",
GenericFkEncoding::Split,
),
(
"ipam.ipaddress",
"assigned_object",
GenericFkEncoding::Split,
),
("ipam.prefix", "scope", GenericFkEncoding::Split),
("ipam.service", "parent_object", GenericFkEncoding::Split),
("ipam.vlangroup", "scope", GenericFkEncoding::Split),
(
"tenancy.contactassignment",
"object",
GenericFkEncoding::Split,
),
("virtualization.cluster", "scope", GenericFkEncoding::Split),
(
"vpn.l2vpntermination",
"assigned_object",
GenericFkEncoding::Split,
),
(
"vpn.tunneltermination",
"termination",
GenericFkEncoding::Split,
),
("wireless.wirelesslan", "scope", GenericFkEncoding::Split),
];
pub fn generic_fk_encoding(model: &str, field: &str) -> Option<GenericFkEncoding> {
GENERIC_FK_FIELDS
.iter()
.find(|(m, f, _)| *m == model && *f == field)
.map(|(_, _, enc)| *enc)
}
pub fn is_generic_fk(model: &str, field: &str) -> bool {
generic_fk_encoding(model, field).is_some()
}