shady 7.0.0

A shadertoy-like library to be able to easily integrate shadertoy-like stuff in your applications.
Documentation
use tracing::instrument;
use wgpu::naga::{front::glsl::Options, ShaderStage};

use super::ShaderParser;

pub struct Glsl(wgpu::naga::front::glsl::Frontend);

impl Glsl {
    #[instrument(level = "trace")]
    pub fn new() -> Self {
        Self(wgpu::naga::front::glsl::Frontend::default())
    }

    pub fn boxed() -> Box<Self> {
        Box::new(Self::new())
    }
}

impl ShaderParser for Glsl {
    #[instrument(skip(self), level = "trace")]
    fn parse(&mut self, fragment_shader: &str) -> Result<wgpu::naga::Module, crate::Error> {
        let parse_options = Options::from(ShaderStage::Fragment);

        self.0
            .parse(&parse_options, fragment_shader)
            .map_err(|err| {
                crate::Error::InvalidGlslFragmentShader(err.emit_to_string(fragment_shader))
            })
    }
}