1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//! Surface loader.

use serde::Deserialize;
use std::collections::HashMap;

use crate::{dom::Surface, geom::Mesh};

/// Surface parameterisation.
#[derive(Clone, Deserialize)]
pub struct SurfaceBuilder(
    /// Mesh name.
    pub String,
    /// Attribute name.
    pub String,
);

impl SurfaceBuilder {
    /// Construct a new instance.
    #[inline]
    #[must_use]
    pub fn build<'a, T>(
        self,
        meshes: &HashMap<String, Mesh>,
        attributes: &'a HashMap<String, T>,
    ) -> Surface<'a, T> {
        Surface::new(meshes[&self.0].clone(), &attributes[&self.1])
    }
}