33import co .lettermint .client .LettermintClient ;
44import co .lettermint .models .Attachment ;
55import co .lettermint .models .SendEmailResponse ;
6+ import co .lettermint .models .MessageTag ;
67import co .lettermint .models .api .SendMailRequest ;
78import co .lettermint .models .api .SendMailResponse ;
89import com .fasterxml .jackson .core .type .TypeReference ;
@@ -28,7 +29,7 @@ public class EmailEndpoint extends Endpoint {
2829 private String route ;
2930 private Map <String , Object > metadata ;
3031 private String tag ;
31- private List <Map < String , String > > tags ;
32+ private List <MessageTag > tags ;
3233 private Map <String , Object > settings ;
3334 private String idempotencyKey ;
3435
@@ -211,6 +212,9 @@ public EmailEndpoint metadata(String key, Object value) {
211212 * Set the email tag.
212213 */
213214 public EmailEndpoint tag (String tag ) {
215+ if (tag != null && tags .size () >= 20 ) {
216+ throw new IllegalArgumentException ("A legacy tag and no more than 19 message tags are permitted" );
217+ }
214218 this .tag = tag ;
215219 return this ;
216220 }
@@ -220,6 +224,27 @@ public EmailEndpoint tag(String tag) {
220224 */
221225 @ SafeVarargs
222226 public final EmailEndpoint tags (Map <String , String >... tags ) {
227+ MessageTag [] normalized = new MessageTag [tags .length ];
228+ for (int index = 0 ; index < tags .length ; index ++) {
229+ normalized [index ] = new MessageTag (tags [index ].get ("name" ), tags [index ].get ("value" ));
230+ }
231+ return tags (normalized );
232+ }
233+
234+ /**
235+ * Set typed reusable name-value tags for the email.
236+ */
237+ public final EmailEndpoint tags (MessageTag ... tags ) {
238+ int maximum = tag == null ? 20 : 19 ;
239+ if (tags .length > maximum ) {
240+ throw new IllegalArgumentException ("No more than " + maximum + " message tags are permitted" );
241+ }
242+ Set <String > names = new HashSet <>();
243+ for (MessageTag messageTag : tags ) {
244+ if (!names .add (messageTag .getName ())) {
245+ throw new IllegalArgumentException ("Message tag names must be unique and case-sensitive" );
246+ }
247+ }
223248 this .tags = new ArrayList <>(Arrays .asList (tags ));
224249 return this ;
225250 }
0 commit comments