Rust is a statically-typed language; you may be familiar with other similar languages like C++, Java or Swift. In these languages, the members, types, and layout of a struct are fixed when the program is compiled.
Because of this, there's no way to add a new struct field at runtime — no "ifs", "ands", or "buts" — you can't do it.
Instead, you have to model that dynamic nature some other way:
Use a type that allows for arbitrary expansion. HashMap and BTreeMap (and many other similar types) allow you to have an arbitrary number of key-value pairs. Under the hood, this is basically how many dynamic languages work - a mapping of strings to arbitrary values:
use std::collections::HashMap;
#[derive(Debug, Default)]
struct Element(HashMap<String, u8>);
fn get_data(_: &Element) -> u8 {
    42
}
fn main() {
    let mut items = vec![
        Element::default(),
        Element::default(),
        Element::default(),
        Element::default(),
    ];
    for x in &mut items {
        let value = get_data(x);
        x.0
            .entry("some_additional_key".to_string())
            .or_insert(value);
    }
}
 
Use a type that allows for specific expansion. Option allows for a value to be present or not:
#[derive(Debug, Default)]
struct Element {
    some_additional_key: Option<u8>,
}
fn get_data(_: &Element) -> u8 {
    42
}
fn main() {
    let mut items = vec![
        Element::default(),
        Element::default(),
        Element::default(),
        Element::default(),
    ];
    for x in &mut items {
        let value = get_data(x);
        x.some_additional_key = Some(value);
    }
}
 
Use composition. Create a new type that wraps your existing type:
#[derive(Debug, Default)]
struct Element;
#[derive(Debug)]
struct EnhancedElement {
    element: Element,
    some_additional_key: u8,
}
fn get_data(_: &Element) -> u8 {
    42
}
fn main() {
    let items = vec![
        Element::default(),
        Element::default(),
        Element::default(),
        Element::default(),
    ];
    let enhanced: Vec<_> = items
        .into_iter()
        .map(|element| {
            let some_additional_key = get_data(&element);
            EnhancedElement {
                element,
                some_additional_key,
            }
        })
        .collect();
}
 
See also: