11use crate :: attribute:: { MetaListCustomMessage , MetaNameValueCustomMessage , MetaPathCustomMessage } ;
22use crate :: types:: { CommaSeparatedNestedMetas , NestedMeta , SingleIdentPath } ;
3+ use crate :: warning:: { Warning , WithWarnings } ;
34use proc_macro2:: TokenStream ;
45use quote:: quote;
56use std:: str:: FromStr ;
7+ use syn:: spanned:: Spanned ;
68
79use super :: lit:: get_str;
810pub type MessageFormat = TokenStream ;
@@ -11,7 +13,9 @@ pub fn default_message_format() -> MessageFormat {
1113 quote ! ( :: serde_valid:: validation:: error:: Format :: Default )
1214}
1315
14- pub fn extract_custom_message_format ( meta : & syn:: Meta ) -> Result < MessageFormat , crate :: Errors > {
16+ pub fn extract_custom_message_format (
17+ meta : & syn:: Meta ,
18+ ) -> Result < WithWarnings < MessageFormat > , crate :: Errors > {
1519 let custom_message_path = match meta {
1620 syn:: Meta :: Path ( path) => path,
1721 syn:: Meta :: List ( list) => & list. path ,
@@ -60,15 +64,24 @@ pub fn extract_custom_message_format(meta: &syn::Meta) -> Result<MessageFormat,
6064fn extract_custom_message_format_from_meta_list (
6165 custom_message_type : & MetaListCustomMessage ,
6266 meta_list : & syn:: MetaList ,
63- ) -> Result < MessageFormat , crate :: Errors > {
67+ ) -> Result < WithWarnings < MessageFormat > , crate :: Errors > {
6468 let path = & meta_list. path ;
6569 let path_ident = SingleIdentPath :: new ( path) . ident ( ) ;
6670 let message_fn_define = meta_list
6771 . parse_args_with ( CommaSeparatedNestedMetas :: parse_terminated)
6872 . map_err ( |error| vec ! [ crate :: Error :: custom_message_parse_error( path_ident, & error) ] ) ?;
6973
7074 match custom_message_type {
71- MetaListCustomMessage :: MessageFn => get_message_fn_from_meta_list ( path, & message_fn_define) ,
75+ MetaListCustomMessage :: MessageFn => get_message_fn_from_meta_list ( path, & message_fn_define)
76+ . map ( |message_fn| {
77+ WithWarnings :: new_with_warnings (
78+ message_fn,
79+ vec ! [ Warning :: new_message_fn_list_deprecated(
80+ path_ident,
81+ path. span( ) ,
82+ ) ] ,
83+ )
84+ } ) ,
7285 #[ cfg( feature = "fluent" ) ]
7386 message_type @ ( MetaListCustomMessage :: I18n | MetaListCustomMessage :: Fluent ) => {
7487 get_fluent_message ( message_type, path, & message_fn_define)
@@ -79,7 +92,7 @@ fn extract_custom_message_format_from_meta_list(
7992fn extract_custom_message_format_from_name_value (
8093 custom_message_type : & MetaNameValueCustomMessage ,
8194 name_value : & syn:: MetaNameValue ,
82- ) -> Result < MessageFormat , crate :: Errors > {
95+ ) -> Result < WithWarnings < MessageFormat > , crate :: Errors > {
8396 match custom_message_type {
8497 MetaNameValueCustomMessage :: Message => get_message ( & name_value. value ) ,
8598 MetaNameValueCustomMessage :: MessageFn => get_message_fn_from_meta_name_value ( name_value) ,
@@ -113,7 +126,7 @@ fn get_message_fn_from_meta_list(
113126
114127fn get_message_fn_from_meta_name_value (
115128 meta_name_value : & syn:: MetaNameValue ,
116- ) -> Result < TokenStream , crate :: Errors > {
129+ ) -> Result < WithWarnings < MessageFormat > , crate :: Errors > {
117130 let fn_define = match & meta_name_value. value {
118131 syn:: Expr :: Path ( syn:: ExprPath { path, .. } ) => quote ! ( #path) ,
119132 syn:: Expr :: Call ( call) => quote ! ( #call) ,
@@ -123,13 +136,15 @@ fn get_message_fn_from_meta_name_value(
123136 ] ) ?,
124137 } ;
125138
126- Ok ( quote ! ( :: serde_valid:: validation:: error:: Format :: MessageFn ( #fn_define) ) )
139+ Ok ( WithWarnings :: new (
140+ quote ! ( :: serde_valid:: validation:: error:: Format :: MessageFn ( #fn_define) ) ,
141+ ) )
127142}
128143
129- fn get_message ( expr : & syn:: Expr ) -> Result < TokenStream , crate :: Errors > {
144+ fn get_message ( expr : & syn:: Expr ) -> Result < WithWarnings < MessageFormat > , crate :: Errors > {
130145 match expr {
131146 syn:: Expr :: Lit ( lit) => {
132- get_str ( & lit. lit ) . map ( |lit_str| quote ! ( :: serde_valid:: validation:: error:: Format :: Message ( #lit_str. to_string( ) ) ) )
147+ get_str ( & lit. lit ) . map ( |lit_str| quote ! ( :: serde_valid:: validation:: error:: Format :: Message ( #lit_str. to_string( ) ) ) ) . map ( WithWarnings :: new )
133148 }
134149 _ => Err ( vec ! [ crate :: Error :: literal_only( expr) ] ) ,
135150 }
@@ -140,7 +155,7 @@ fn get_fluent_message(
140155 message_type : & MetaListCustomMessage ,
141156 path : & syn:: Path ,
142157 fn_define : & CommaSeparatedNestedMetas ,
143- ) -> Result < MessageFormat , crate :: Errors > {
158+ ) -> Result < WithWarnings < MessageFormat > , crate :: Errors > {
144159 use quote:: ToTokens ;
145160
146161 use crate :: types:: CommaSeparatedTokenStreams ;
@@ -151,14 +166,14 @@ fn get_fluent_message(
151166 let id = get_fluent_id ( & fn_define[ 0 ] )
152167 . ok_or_else ( || vec ! [ crate :: Error :: fluent_allow_key( message_type, & fn_define[ 0 ] ) ] ) ?;
153168
154- Ok ( quote ! (
169+ Ok ( WithWarnings :: new ( quote ! (
155170 :: serde_valid:: validation:: error:: Format :: Fluent (
156171 :: serde_valid:: fluent:: Message {
157172 id: #id,
158173 args: vec![ ]
159174 }
160175 )
161- ) )
176+ ) ) )
162177 }
163178 _ => {
164179 let mut errors = vec ! [ ] ;
@@ -180,14 +195,14 @@ fn get_fluent_message(
180195 } )
181196 . collect :: < CommaSeparatedTokenStreams > ( ) ;
182197 if errors. is_empty ( ) {
183- Ok ( quote ! (
198+ Ok ( WithWarnings :: new ( quote ! (
184199 :: serde_valid:: validation:: error:: Format :: Fluent (
185200 :: serde_valid:: fluent:: Message {
186201 id: #id,
187202 args: vec![ #args]
188203 }
189204 )
190- ) )
205+ ) ) )
191206 } else {
192207 Err ( errors)
193208 }
0 commit comments