ironworks 0.4.1

Modular FFXIV data toolkit written in rust.
Documentation
use std::{ops::Deref, sync::Arc};

#[derive(Debug)]
pub enum Borrowed<'a, T> {
	Reference(&'a T),
	Arc(Arc<T>),
}

impl<'a, T> From<&'a T> for Borrowed<'a, T> {
	fn from(value: &'a T) -> Self {
		Self::Reference(value)
	}
}

impl<T> From<Arc<T>> for Borrowed<'_, T> {
	fn from(value: Arc<T>) -> Self {
		Self::Arc(value)
	}
}

impl<T> Deref for Borrowed<'_, T> {
	type Target = T;

	fn deref(&self) -> &Self::Target {
		match self {
			Self::Reference(reference) => reference,
			Self::Arc(arc) => Deref::deref(arc),
		}
	}
}

impl<T> Clone for Borrowed<'_, T> {
	fn clone(&self) -> Self {
		match self {
			Self::Reference(reference) => Self::Reference(*reference),
			Self::Arc(arc) => Self::Arc(arc.clone()),
		}
	}
}