windows-bindgen 0.41.0

Code gen support for the windows crate
Documentation
use super::*;

pub struct MethodNames(BTreeMap<String, u32>);

impl MethodNames {
    pub fn new() -> Self {
        Self(BTreeMap::new())
    }

    pub fn add(&mut self, gen: &Gen, method: MethodDef) -> TokenStream {
        let name = gen.reader.method_def_special_name(method);
        let overload = self.0.entry(name.to_string()).or_insert(0);
        *overload += 1;
        if *overload > 1 {
            format!("{}{}", name, overload).into()
        } else {
            to_ident(&name)
        }
    }

    pub fn add_vtable_types(&mut self, gen: &Gen, def: TypeDef) {
        for def in gen.reader.type_def_vtables(def) {
            if let Type::TypeDef((def, _)) = def {
                for method in gen.reader.type_def_methods(def) {
                    self.add(gen, method);
                }
            }
        }
    }
}