use crate::EffectId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CustomEffectProgramLanguage {
WgslUtf8,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct CustomEffectDescriptorV1 {
pub language: CustomEffectProgramLanguage,
pub source: String,
}
impl CustomEffectDescriptorV1 {
pub fn wgsl_utf8(source: impl Into<String>) -> Self {
Self {
language: CustomEffectProgramLanguage::WgslUtf8,
source: source.into(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CustomEffectRegistrationError {
Unsupported,
InvalidSource,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct CustomEffectDescriptorV2 {
pub language: CustomEffectProgramLanguage,
pub source: String,
}
impl CustomEffectDescriptorV2 {
pub fn wgsl_utf8(source: impl Into<String>) -> Self {
Self {
language: CustomEffectProgramLanguage::WgslUtf8,
source: source.into(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct CustomEffectDescriptorV3 {
pub language: CustomEffectProgramLanguage,
pub source: String,
}
impl CustomEffectDescriptorV3 {
pub fn wgsl_utf8(source: impl Into<String>) -> Self {
Self {
language: CustomEffectProgramLanguage::WgslUtf8,
source: source.into(),
}
}
}
pub trait CustomEffectService {
fn register_custom_effect_v1(
&mut self,
desc: CustomEffectDescriptorV1,
) -> Result<EffectId, CustomEffectRegistrationError>;
fn register_custom_effect_v2(
&mut self,
desc: CustomEffectDescriptorV2,
) -> Result<EffectId, CustomEffectRegistrationError>;
fn register_custom_effect_v3(
&mut self,
desc: CustomEffectDescriptorV3,
) -> Result<EffectId, CustomEffectRegistrationError>;
fn unregister_custom_effect(&mut self, id: EffectId) -> bool;
}