Revert "Add a proc macro for deriving override structs with optional fields"

This reverts commit ab9356e9d8.
This commit is contained in:
Nathan Sobo 2023-08-17 13:48:46 -06:00
parent ab9356e9d8
commit f3a275d339
9 changed files with 96 additions and 209 deletions

View file

@ -1,6 +1,6 @@
use crate::{ use crate::{
div,
element::{Element, ElementMetadata}, element::{Element, ElementMetadata},
frame,
text::ArcCow, text::ArcCow,
themes::rose_pine, themes::rose_pine,
}; };
@ -82,9 +82,8 @@ pub fn button<V>() -> Button<V, ()> {
impl<V: 'static, D: 'static> Button<V, D> { impl<V: 'static, D: 'static> Button<V, D> {
fn render(&mut self, view: &mut V, cx: &mut ViewContext<V>) -> impl Element<V> { fn render(&mut self, view: &mut V, cx: &mut ViewContext<V>) -> impl Element<V> {
// TODO: Drive theme from the context // TODO: Drive theme from the context
let button = div() let button = frame()
.fill(rose_pine::dawn().error(0.5)) .fill(rose_pine::dawn().error(0.5))
// .hover_fill(rose_pine::dawn().error(0.6))
.h_4() .h_4()
.children(self.label.clone()); .children(self.label.clone());

View file

@ -1,7 +1,7 @@
use crate::{ use crate::{
adapter::Adapter, adapter::Adapter,
color::Hsla, color::Hsla,
style::{Display, ElementStyle, ElementStyleOverrides, Fill, Overflow, Position}, style::{Display, ElementStyle, Fill, Overflow, Position},
}; };
use anyhow::Result; use anyhow::Result;
pub use gpui::LayoutContext; pub use gpui::LayoutContext;
@ -27,7 +27,6 @@ pub struct Layout<'a, E: ?Sized> {
pub struct ElementMetadata<V> { pub struct ElementMetadata<V> {
pub style: ElementStyle, pub style: ElementStyle,
pub hover_style: ElementStyleOverrides,
pub handlers: Vec<EventHandler<V>>, pub handlers: Vec<EventHandler<V>>,
} }
@ -51,7 +50,6 @@ impl<V> Default for ElementMetadata<V> {
fn default() -> Self { fn default() -> Self {
Self { Self {
style: ElementStyle::default(), style: ElementStyle::default(),
hover_style: ElementStyleOverrides::default(),
handlers: Vec::new(), handlers: Vec::new(),
} }
} }
@ -60,7 +58,8 @@ impl<V> Default for ElementMetadata<V> {
pub trait Element<V: 'static>: 'static { pub trait Element<V: 'static>: 'static {
type Layout: 'static; type Layout: 'static;
fn metadata(&mut self) -> &mut ElementMetadata<V>; fn style_mut(&mut self) -> &mut ElementStyle;
fn handlers_mut(&mut self) -> &mut Vec<EventHandler<V>>;
fn layout(&mut self, view: &mut V, cx: &mut LayoutContext<V>) fn layout(&mut self, view: &mut V, cx: &mut LayoutContext<V>)
-> Result<(NodeId, Self::Layout)>; -> Result<(NodeId, Self::Layout)>;
@ -127,7 +126,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().handlers.push(EventHandler { self.handlers_mut().push(EventHandler {
handler: Rc::new(move |view, event, event_cx| { handler: Rc::new(move |view, event, event_cx| {
let event = event.downcast_ref::<MouseButtonEvent>().unwrap(); let event = event.downcast_ref::<MouseButtonEvent>().unwrap();
if event.button == button && event.is_down { if event.button == button && event.is_down {
@ -148,7 +147,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().handlers.push(EventHandler { self.handlers_mut().push(EventHandler {
handler: Rc::new(move |view, event, event_cx| { handler: Rc::new(move |view, event, event_cx| {
let event = event.downcast_ref::<MouseButtonEvent>().unwrap(); let event = event.downcast_ref::<MouseButtonEvent>().unwrap();
if event.button == button && event.is_down { if event.button == button && event.is_down {
@ -169,7 +168,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().handlers.push(EventHandler { self.handlers_mut().push(EventHandler {
handler: Rc::new(move |view, event, event_cx| { handler: Rc::new(move |view, event, event_cx| {
let event = event.downcast_ref::<MouseButtonEvent>().unwrap(); let event = event.downcast_ref::<MouseButtonEvent>().unwrap();
if event.button == button && !event.is_down { if event.button == button && !event.is_down {
@ -190,7 +189,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().handlers.push(EventHandler { self.handlers_mut().push(EventHandler {
handler: Rc::new(move |view, event, event_cx| { handler: Rc::new(move |view, event, event_cx| {
let event = event.downcast_ref::<MouseButtonEvent>().unwrap(); let event = event.downcast_ref::<MouseButtonEvent>().unwrap();
if event.button == button && !event.is_down { if event.button == button && !event.is_down {
@ -209,7 +208,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.display = Display::Block; self.style_mut().display = Display::Block;
self self
} }
@ -217,7 +216,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.display = Display::Flex; self.style_mut().display = Display::Flex;
self self
} }
@ -225,7 +224,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.display = Display::Grid; self.style_mut().display = Display::Grid;
self self
} }
@ -235,8 +234,8 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.overflow.x = Overflow::Visible; self.style_mut().overflow.x = Overflow::Visible;
self.metadata().style.overflow.y = Overflow::Visible; self.style_mut().overflow.y = Overflow::Visible;
self self
} }
@ -244,8 +243,8 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.overflow.x = Overflow::Hidden; self.style_mut().overflow.x = Overflow::Hidden;
self.metadata().style.overflow.y = Overflow::Hidden; self.style_mut().overflow.y = Overflow::Hidden;
self self
} }
@ -253,8 +252,8 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.overflow.x = Overflow::Scroll; self.style_mut().overflow.x = Overflow::Scroll;
self.metadata().style.overflow.y = Overflow::Scroll; self.style_mut().overflow.y = Overflow::Scroll;
self self
} }
@ -262,7 +261,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.overflow.x = Overflow::Visible; self.style_mut().overflow.x = Overflow::Visible;
self self
} }
@ -270,7 +269,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.overflow.x = Overflow::Hidden; self.style_mut().overflow.x = Overflow::Hidden;
self self
} }
@ -278,7 +277,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.overflow.x = Overflow::Scroll; self.style_mut().overflow.x = Overflow::Scroll;
self self
} }
@ -286,7 +285,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.overflow.y = Overflow::Visible; self.style_mut().overflow.y = Overflow::Visible;
self self
} }
@ -294,7 +293,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.overflow.y = Overflow::Hidden; self.style_mut().overflow.y = Overflow::Hidden;
self self
} }
@ -302,7 +301,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.overflow.y = Overflow::Scroll; self.style_mut().overflow.y = Overflow::Scroll;
self self
} }
@ -312,7 +311,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.position = Position::Relative; self.style_mut().position = Position::Relative;
self self
} }
@ -320,7 +319,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.position = Position::Absolute; self.style_mut().position = Position::Absolute;
self self
} }
@ -330,10 +329,10 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.inset.top = length; self.style_mut().inset.top = length;
self.metadata().style.inset.right = length; self.style_mut().inset.right = length;
self.metadata().style.inset.bottom = length; self.style_mut().inset.bottom = length;
self.metadata().style.inset.left = length; self.style_mut().inset.left = length;
self self
} }
@ -341,7 +340,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.size.width = width.into(); self.style_mut().size.width = width.into();
self self
} }
@ -349,7 +348,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.size.width = Length::Auto; self.style_mut().size.width = Length::Auto;
self self
} }
@ -358,7 +357,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.size.width = length; self.style_mut().size.width = length;
self self
} }
@ -367,7 +366,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.min_size.width = length; self.style_mut().min_size.width = length;
self self
} }
@ -375,7 +374,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.size.height = height.into(); self.style_mut().size.height = height.into();
self self
} }
@ -383,7 +382,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.size.height = Length::Auto; self.style_mut().size.height = Length::Auto;
self self
} }
@ -392,7 +391,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.size.height = height; self.style_mut().size.height = height;
self self
} }
@ -401,7 +400,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.min_size.height = length; self.style_mut().min_size.height = length;
self self
} }
@ -409,7 +408,7 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.fill = fill.into(); self.style_mut().fill = fill.into();
self self
} }
@ -417,14 +416,15 @@ pub trait Element<V: 'static>: 'static {
where where
Self: Sized, Self: Sized,
{ {
self.metadata().style.text_color = Some(color.into()); self.style_mut().text_color = Some(color.into());
self self
} }
} }
// Object-safe counterpart of Element used by AnyElement to store elements as trait objects. // Object-safe counterpart of Element used by AnyElement to store elements as trait objects.
trait ElementObject<V> { trait ElementObject<V> {
fn metadata(&mut self) -> &mut ElementMetadata<V>; fn style_mut(&mut self) -> &mut ElementStyle;
fn handlers_mut(&mut self) -> &mut Vec<EventHandler<V>>;
fn layout(&mut self, view: &mut V, cx: &mut LayoutContext<V>) fn layout(&mut self, view: &mut V, cx: &mut LayoutContext<V>)
-> Result<(NodeId, Box<dyn Any>)>; -> Result<(NodeId, Box<dyn Any>)>;
fn paint( fn paint(
@ -436,8 +436,12 @@ trait ElementObject<V> {
} }
impl<V: 'static, E: Element<V>> ElementObject<V> for E { impl<V: 'static, E: Element<V>> ElementObject<V> for E {
fn metadata(&mut self) -> &mut ElementMetadata<V> { fn style_mut(&mut self) -> &mut ElementStyle {
Element::metadata(self) Element::style_mut(self)
}
fn handlers_mut(&mut self) -> &mut Vec<EventHandler<V>> {
Element::handlers_mut(self)
} }
fn layout( fn layout(
@ -486,7 +490,7 @@ impl<V: 'static> AnyElement<V> {
} }
pub fn push_text_style(&mut self, cx: &mut impl RenderContext) -> bool { pub fn push_text_style(&mut self, cx: &mut impl RenderContext) -> bool {
let text_style = self.element.metadata().style.text_style(); let text_style = self.element.style_mut().text_style();
if let Some(text_style) = text_style { if let Some(text_style) = text_style {
let mut current_text_style = cx.text_style(); let mut current_text_style = cx.text_style();
text_style.apply(&mut current_text_style); text_style.apply(&mut current_text_style);
@ -512,7 +516,7 @@ impl<V: 'static> AnyElement<V> {
from_element: element_layout.as_mut(), from_element: element_layout.as_mut(),
}; };
for event_handler in self.element.metadata().handlers.iter().cloned() { for event_handler in self.element.handlers_mut().iter().cloned() {
let EngineLayout { order, bounds } = layout.from_engine; let EngineLayout { order, bounds } = layout.from_engine;
let view_id = cx.view_id(); let view_id = cx.view_id();
@ -547,8 +551,12 @@ impl<V: 'static> AnyElement<V> {
impl<V: 'static> Element<V> for AnyElement<V> { impl<V: 'static> Element<V> for AnyElement<V> {
type Layout = (); type Layout = ();
fn metadata(&mut self) -> &mut ElementMetadata<V> { fn style_mut(&mut self) -> &mut ElementStyle {
self.element.metadata() self.element.style_mut()
}
fn handlers_mut(&mut self) -> &mut Vec<EventHandler<V>> {
self.element.handlers_mut()
} }
fn layout( fn layout(

View file

@ -1,5 +1,8 @@
use crate::element::{ use crate::{
AnyElement, Element, ElementMetadata, IntoElement, Layout, LayoutContext, NodeId, PaintContext, element::{
AnyElement, Element, EventHandler, IntoElement, Layout, LayoutContext, NodeId, PaintContext,
},
style::ElementStyle,
}; };
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use gpui::LayoutNodeId; use gpui::LayoutNodeId;
@ -7,23 +10,29 @@ use playground_macros::IntoElement;
#[derive(IntoElement)] #[derive(IntoElement)]
#[element_crate = "crate"] #[element_crate = "crate"]
pub struct Div<V: 'static> { pub struct Frame<V: 'static> {
metadata: ElementMetadata<V>, style: ElementStyle,
handlers: Vec<EventHandler<V>>,
children: Vec<AnyElement<V>>, children: Vec<AnyElement<V>>,
} }
pub fn div<V>() -> Div<V> { pub fn frame<V>() -> Frame<V> {
Div { Frame {
metadata: ElementMetadata::default(), style: ElementStyle::default(),
handlers: Vec::new(),
children: Vec::new(), children: Vec::new(),
} }
} }
impl<V: 'static> Element<V> for Div<V> { impl<V: 'static> Element<V> for Frame<V> {
type Layout = (); type Layout = ();
fn metadata(&mut self) -> &mut ElementMetadata<V> { fn style_mut(&mut self) -> &mut ElementStyle {
&mut self.metadata &mut self.style
}
fn handlers_mut(&mut self) -> &mut Vec<EventHandler<V>> {
&mut self.handlers
} }
fn layout( fn layout(
@ -41,10 +50,7 @@ impl<V: 'static> Element<V> for Div<V> {
let node_id = cx let node_id = cx
.layout_engine() .layout_engine()
.ok_or_else(|| anyhow!("no layout engine"))? .ok_or_else(|| anyhow!("no layout engine"))?
.add_node( .add_node(self.style.to_taffy(rem_size), child_layout_node_ids)?;
self.metadata.style.to_taffy(rem_size),
child_layout_node_ids,
)?;
Ok((node_id, ())) Ok((node_id, ()))
} }
@ -52,7 +58,7 @@ impl<V: 'static> Element<V> for Div<V> {
fn paint(&mut self, layout: Layout<()>, view: &mut V, cx: &mut PaintContext<V>) -> Result<()> { fn paint(&mut self, layout: Layout<()>, view: &mut V, cx: &mut PaintContext<V>) -> Result<()> {
cx.scene.push_quad(gpui::scene::Quad { cx.scene.push_quad(gpui::scene::Quad {
bounds: layout.from_engine.bounds, bounds: layout.from_engine.bounds,
background: self.metadata.style.fill.color().map(Into::into), background: self.style.fill.color().map(Into::into),
border: Default::default(), border: Default::default(),
corner_radii: Default::default(), corner_radii: Default::default(),
}); });
@ -64,7 +70,7 @@ impl<V: 'static> Element<V> for Div<V> {
} }
} }
impl<V: 'static> Div<V> { impl<V: 'static> Frame<V> {
pub fn child(mut self, child: impl IntoElement<V>) -> Self { pub fn child(mut self, child: impl IntoElement<V>) -> Self {
self.children.push(child.into_any_element()); self.children.push(child.into_any_element());
self self

View file

@ -1,11 +1,11 @@
#![allow(dead_code, unused_variables)] #![allow(dead_code, unused_variables)]
use color::black; use color::black;
use components::button; use components::button;
use div::div;
use element::Element; use element::Element;
use frame::frame;
use gpui::{ use gpui::{
geometry::{rect::RectF, vector::vec2f}, geometry::{rect::RectF, vector::vec2f},
platform::WindowOptions, platform::{MouseButton, WindowOptions},
}; };
use log::LevelFilter; use log::LevelFilter;
use simplelog::SimpleLogger; use simplelog::SimpleLogger;
@ -16,8 +16,8 @@ use view::view;
mod adapter; mod adapter;
mod color; mod color;
mod components; mod components;
mod div;
mod element; mod element;
mod frame;
mod paint_context; mod paint_context;
mod style; mod style;
mod text; mod text;
@ -44,7 +44,7 @@ fn main() {
} }
fn playground<V: 'static>(theme: &ThemeColors) -> impl Element<V> { fn playground<V: 'static>(theme: &ThemeColors) -> impl Element<V> {
div() frame()
.text_color(black()) .text_color(black())
.h_full() .h_full()
.w_half() .w_half()

View file

@ -1,20 +1,11 @@
use crate::color::Hsla; use crate::color::Hsla;
use gpui::geometry::{DefinedLength, Edges, Length, Point, Size}; use gpui::geometry::{DefinedLength, Edges, Length, Point, Size};
use playground_macros::Overrides;
pub use taffy::style::{ pub use taffy::style::{
AlignContent, AlignItems, AlignSelf, Display, FlexDirection, FlexWrap, JustifyContent, AlignContent, AlignItems, AlignSelf, Display, FlexDirection, FlexWrap, JustifyContent,
Overflow, Position, Overflow, Position,
}; };
pub trait Overrides { #[derive(Clone)]
type Base;
fn is_some(&self) -> bool;
fn apply(&self, base: &mut Self::Base);
}
#[derive(Clone, Overrides)]
#[overrides_crate = "crate"]
pub struct ElementStyle { pub struct ElementStyle {
/// What layout strategy should be used? /// What layout strategy should be used?
pub display: Display, pub display: Display,

View file

@ -1,4 +1,4 @@
use crate::element::{Element, ElementMetadata, IntoElement}; use crate::element::{Element, ElementMetadata, EventHandler, IntoElement};
use gpui::{geometry::Size, text_layout::LineLayout, RenderContext}; use gpui::{geometry::Size, text_layout::LineLayout, RenderContext};
use parking_lot::Mutex; use parking_lot::Mutex;
use std::sync::Arc; use std::sync::Arc;
@ -22,8 +22,8 @@ pub struct Text<V> {
impl<V: 'static> Element<V> for Text<V> { impl<V: 'static> Element<V> for Text<V> {
type Layout = Arc<Mutex<Option<TextLayout>>>; type Layout = Arc<Mutex<Option<TextLayout>>>;
fn metadata(&mut self) -> &mut crate::element::ElementMetadata<V> { fn style_mut(&mut self) -> &mut crate::style::ElementStyle {
&mut self.metadata &mut self.metadata.style
} }
fn layout( fn layout(
@ -91,6 +91,10 @@ impl<V: 'static> Element<V> for Text<V> {
); );
Ok(()) Ok(())
} }
fn handlers_mut(&mut self) -> &mut Vec<EventHandler<V>> {
&mut self.metadata.handlers
}
} }
pub struct TextLayout { pub struct TextLayout {

View file

@ -79,8 +79,12 @@ pub fn derive_element(input: TokenStream) -> TokenStream {
{ {
type Layout = #crate_name::element::AnyElement<V>; type Layout = #crate_name::element::AnyElement<V>;
fn metadata(&mut self) -> &mut #crate_name::element::ElementMetadata<V> { fn style_mut(&mut self) -> &mut #crate_name::style::ElementStyle {
&mut self.metadata &mut self.metadata.style
}
fn handlers_mut(&mut self) -> &mut Vec<#crate_name::element::EventHandler<V>> {
&mut self.metadata.handlers
} }
fn layout( fn layout(

View file

@ -1,119 +0,0 @@
extern crate proc_macro;
use proc_macro::TokenStream;
use quote::{format_ident, quote};
use syn::{parse_macro_input, Data, DeriveInput, Fields, Lit, Meta};
/// When deriving Overrides on a struct Foo, builds a new struct FooOverrides
/// that implements the Overrides trait so it can be applied to Foo.
pub fn derive_overrides(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let crate_name: String = input
.attrs
.iter()
.find_map(|attr| {
if attr.path.is_ident("overrides_crate") {
match attr.parse_meta() {
Ok(Meta::NameValue(nv)) => {
if let Lit::Str(s) = nv.lit {
Some(s.value())
} else {
None
}
}
_ => None,
}
} else {
None
}
})
.unwrap_or_else(|| String::from("playground"));
let crate_name = format_ident!("{}", crate_name);
let ident = input.ident;
let new_ident = syn::Ident::new(&format!("{}Overrides", ident), ident.span());
let data = match input.data {
Data::Struct(s) => s,
_ => panic!("Override can only be derived for structs"),
};
let fields = match data.fields {
Fields::Named(fields) => fields.named,
_ => panic!("Override can only be derived for structs with named fields"),
};
let new_fields = fields
.iter()
.map(|f| {
let name = &f.ident;
let ty = &f.ty;
if let syn::Type::Path(typepath) = ty {
if typepath.path.segments.last().unwrap().ident == "Option" {
return quote! { #name: #ty };
}
}
quote! { #name: Option<#ty> }
})
.collect::<Vec<_>>();
let names = fields.iter().map(|f| &f.ident);
let is_some_implementation = names.clone().map(|name| {
quote! {
self.#name.is_some()
}
});
let apply_implementation = fields.iter().map(|f| {
let name = &f.ident;
let ty = &f.ty;
if let syn::Type::Path(typepath) = ty {
if typepath.path.segments.last().unwrap().ident == "Option" {
return quote! {
base.#name = self.#name.clone();
};
}
}
quote! {
if let Some(value) = &self.#name {
base.#name = value.clone();
}
}
});
let default_implementation = names.map(|name| {
quote! {
#name: None,
}
});
let expanded = quote! {
pub struct #new_ident {
#(#new_fields,)*
}
impl #crate_name::style::Overrides for #new_ident {
type Base = #ident;
fn is_some(&self) -> bool {
#(#is_some_implementation)||*
}
fn apply(&self, base: &mut Self::Base) {
#(#apply_implementation)*
}
}
impl Default for #new_ident {
fn default() -> Self {
Self {
#(#default_implementation)*
}
}
}
};
TokenStream::from(expanded)
}

View file

@ -2,7 +2,6 @@ use proc_macro::TokenStream;
mod derive_element; mod derive_element;
mod derive_into_element; mod derive_into_element;
mod derive_overrides;
mod tailwind_lengths; mod tailwind_lengths;
#[proc_macro_derive(Element, attributes(element_crate))] #[proc_macro_derive(Element, attributes(element_crate))]
@ -15,11 +14,6 @@ pub fn derive_into_element(input: TokenStream) -> TokenStream {
derive_into_element::derive_into_element(input) derive_into_element::derive_into_element(input)
} }
#[proc_macro_derive(Overrides, attributes(overrides_crate))]
pub fn derive_overrides(input: TokenStream) -> TokenStream {
derive_overrides::derive_overrides(input)
}
#[proc_macro_attribute] #[proc_macro_attribute]
pub fn tailwind_lengths(attr: TokenStream, item: TokenStream) -> TokenStream { pub fn tailwind_lengths(attr: TokenStream, item: TokenStream) -> TokenStream {
tailwind_lengths::tailwind_lengths(attr, item) tailwind_lengths::tailwind_lengths(attr, item)