Collate members of vec of structs... correct pattern?

Simply trying to collate the different members of structs in an array into their own homogeneous array:

pub(crate) struct BuoysData {
    pub(crate) data: Vec<BuoyData>
}

impl BuoysData {
    fn collate <T> (&self, s: Sensor) -> Vec<T> {
        let mut res: Vec<T> = Vec::new();
        match s {
            Sensor::System => { for d in self.data { res.push(d.data.sys) } }
            Sensor::Wave => { for d in self.data { res.push(d.data.wave) } }
            Sensor::MET => { for d in self.data { res.push(d.data.met) } }
            Sensor::GPS => { for d in self.data { res.push(d.data.gps) } }
            Sensor::Power24 => { for d in self.data { res.push(d.data.pwr24) } }
            Sensor::Power12 => { for d in self.data { res.push(d.data.pwr12) } }
            Sensor::Power5 => { for d in self.data { res.push(d.data.pwr5) } }
            Sensor::Power3_3 => { for d in self.data { res.push(d.data.pwr3_3) } }
            Sensor::BattPrim => { for d in self.data { res.push(d.data.pbatt) } }
            Sensor::BattSec => { for d in self.data { res.push(d.data.sbatt) } }
            Sensor::ADCP => {for d in self.data { res.push(d.data.adcp) }}
            Sensor::Auxiliary => { for d in self.data { res.push(d.data.aux) } }
            Sensor::TideGPS => { for d in self.data { res.push(d.data.tgps) } }
        }
        res
    }
}

Doesn't work

Sensor::System => { for d in self.data { res.push(d.data.sys) } }
                                                               ---- ^^^^^^^^^^ expected type parameter `T`, found `SysData`

The idea being to call e.g.

let buoys_adcp_data = buoys_data.collate(adcp);

What is the correct/standard pattern in rust to achieve this?

This is the same problem I describe here. Namely you can't use a generic parameter, because the caller chooses the concrete type of the parameter (i.e. if I were to call buoys_data.collate::<i32>(), I wouldn't necessarily get a Vec<i32>), not the callee (your BuoysData::collate method). I've listed possible solutions in the linked answer.