use crate::BundledAsset;
use const_serialize::{ConstStr, SerializeConst};
use const_serialize_08 as const_serialize;
use std::hash::Hash;
#[derive(Debug, Clone, Copy, PartialEq, Eq, SerializeConst)]
#[repr(C, u8)]
#[allow(clippy::large_enum_variant)]
#[non_exhaustive]
pub enum SymbolData {
Asset(BundledAsset),
AndroidArtifact(AndroidArtifactMetadata),
SwiftPackage(SwiftPackageMetadata),
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, SerializeConst)]
pub enum Platform {
Android,
Ios,
Macos,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, SerializeConst)]
pub struct PlatformFlags(u8);
impl PlatformFlags {
pub const fn new() -> Self {
Self(0)
}
}
impl Default for PlatformFlags {
fn default() -> Self {
Self::new()
}
}
impl PlatformFlags {
pub const fn with_platform(mut self, platform: Platform) -> Self {
self.0 |= 1 << platform as u8;
self
}
pub const fn supports(&self, platform: Platform) -> bool {
(self.0 & (1 << platform as u8)) != 0
}
pub const fn all() -> Self {
Self(0b000111) }
pub const fn mobile() -> Self {
Self(0b000011) }
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct PlatformIdentifiers {
pub android: Option<ConstStr>,
pub ios: Option<ConstStr>,
pub macos: Option<ConstStr>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, SerializeConst)]
pub struct AndroidArtifactMetadata {
pub plugin_name: ConstStr,
pub artifact_path: ConstStr,
pub gradle_dependencies: ConstStr,
}
impl AndroidArtifactMetadata {
pub const fn new(
plugin_name: &'static str,
artifact_path: &'static str,
gradle_dependencies: &'static str,
) -> Self {
Self {
plugin_name: ConstStr::new(plugin_name),
artifact_path: ConstStr::new(artifact_path),
gradle_dependencies: ConstStr::new(gradle_dependencies),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, SerializeConst)]
pub struct SwiftPackageMetadata {
pub plugin_name: ConstStr,
pub package_path: ConstStr,
pub product: ConstStr,
}
impl SwiftPackageMetadata {
pub const fn new(
plugin_name: &'static str,
package_path: &'static str,
product: &'static str,
) -> Self {
Self {
plugin_name: ConstStr::new(plugin_name),
package_path: ConstStr::new(package_path),
product: ConstStr::new(product),
}
}
}