From 6efa27dadec8ca12a1bcb2d07d68d041af84e200 Mon Sep 17 00:00:00 2001 From: Viktor Lott Date: Mon, 16 Jan 2023 22:15:17 +0100 Subject: [PATCH] Added generics to types --- src/builder.rs | 2 +- src/docs/type.md | 2 +- src/tools.rs | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 2ef1e18..993ffe1 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -246,7 +246,7 @@ impl ToTokens for TypeStructure { impl TypeAlias { pub fn new<'a>(source_code: &'a str, ident: &'a Ident, ty: &'a Type, generics: Option) -> Self { - let type_doc = doc_type(ident, ty, source_code); + let type_doc = doc_type(ident, ty, &generics, source_code); new!({ clone[ident, ty, generics], diff --git a/src/docs/type.md b/src/docs/type.md index 5df7ccf..cf3ec6c 100644 --- a/src/docs/type.md +++ b/src/docs/type.md @@ -1,6 +1,6 @@ Use `{name}` as a type. ```no_run -type {name} = {ty}; +type {name}{generics} = {ty}; {source_code} ``` diff --git a/src/tools.rs b/src/tools.rs index b57f70e..50d45a6 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -1,5 +1,5 @@ use ::rustfmt::{format_input, Input}; -use quote::{format_ident, ToTokens}; +use quote::{format_ident, ToTokens, quote}; use std::{io::Sink, collections::HashSet}; use syn::{self, parse_quote, Field, Ident, Type, Generics}; @@ -92,15 +92,17 @@ pub(crate) use new; pub(crate) use ident; -pub fn doc_type(name: &Ident, ty: &Type, source_code: &str) -> String { +pub fn doc_type(name: &Ident, ty: &Type, generics: &Option, source_code: &str) -> String { let name = name.to_string(); let ty = ty.to_token_stream().to_string().replace(' ', ""); + let generics = quote!(#generics).to_string(); format!( include_str!("docs/type.md"), source_code = source_code, name = name, - ty = ty + ty = ty, + generics = generics ) } fn doc_field(name: &Ident, ty: &Type, parent: &str) -> String {