use crate::{rfinput::*, types::Pol};
pub mod ffi;
use std::fmt;
#[cfg(any(feature = "python", feature = "python-stubgen"))]
use pyo3::prelude::*;
#[cfg(feature = "python-stubgen")]
use pyo3_stub_gen_derive::gen_stub_pyclass;
#[cfg(test)]
mod test;
#[cfg_attr(feature = "python-stubgen", gen_stub_pyclass)]
#[cfg_attr(
any(feature = "python", feature = "python-stubgen"),
pyclass(get_all, set_all, from_py_object)
)]
#[derive(Clone, Debug, PartialEq)]
pub struct Antenna {
pub ant: u32,
pub tile_id: u32,
pub tile_name: String,
pub rfinput_x: Rfinput,
pub rfinput_y: Rfinput,
pub electrical_length_m: f64,
pub north_m: f64,
pub east_m: f64,
pub height_m: f64,
}
impl Antenna {
pub(crate) fn new(x_pol: &Rfinput, y_pol: &Rfinput) -> Self {
Self {
ant: x_pol.ant,
tile_id: x_pol.tile_id,
tile_name: x_pol.tile_name.to_string(),
rfinput_x: x_pol.clone(),
rfinput_y: y_pol.clone(),
electrical_length_m: x_pol.electrical_length_m,
north_m: x_pol.north_m,
east_m: x_pol.east_m,
height_m: x_pol.height_m,
}
}
pub(crate) fn populate_antennas(rf_inputs: &[Rfinput]) -> Vec<Antenna> {
let mut antennas: Vec<Antenna> = Vec::with_capacity(rf_inputs.len() / 2);
for x_index in 0..rf_inputs.len() {
if rf_inputs[x_index].pol == Pol::X {
for y_index in 0..rf_inputs.len() {
if rf_inputs[y_index].pol == Pol::Y
&& rf_inputs[x_index].tile_id == rf_inputs[y_index].tile_id
{
antennas.push(Antenna::new(&rf_inputs[x_index], &rf_inputs[y_index]));
}
}
}
}
antennas
}
}
impl fmt::Display for Antenna {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.tile_name)
}
}