/* Ċ Ġ* ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 . Ċ Ġ*/ Ċ Ċ package Ġsoftware . amazon . smithy . kotlin . codegen . core Ċ Ċ import Ġsoftware . amazon . smithy . kotlin . codegen . lang . isValid Kotlin Identifier Ċ import Ġsoftware . amazon . smithy . kotlin . codegen . utils . split On Word Bound aries Ċ import Ġsoftware . amazon . smithy . kotlin . codegen . utils . to Camel Case Ċ import Ġsoftware . amazon . smithy . kotlin . codegen . utils . to Pas cal Case Ċ import Ġsoftware . amazon . smithy . model . shapes . Member Shape Ċ import Ġsoftware . amazon . smithy . model . shapes . Operation Shape Ċ import Ġsoftware . amazon . smithy . model . shapes . Service Shape Ċ import Ġsoftware . amazon . smithy . model . shapes . Shape Ċ import Ġsoftware . amazon . smithy . model . traits . Enum Definition Ċ import Ġjava . util . logging . Logger Ċ Ċ // Ġ( some what ) Ġcentral ized Ġnaming Ġrules Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġdefault Ġname Ġfor Ġa Ġshape Ġ( for Ġcode Ġgeneration ). Ġ ĠDeleg ates Ġto Ċ Ġ* ĠSm ithy Ġto Ġrename Ġshapes Ġwhen Ġconfigured Ġto Ġdo Ġso Ġin Ġthe Ġmodel . Ċ Ġ*/ Ċ fun ĠShape . default Name ( service Shape : ĠService Shape ): ĠString Ġ= Ġid . getName ( service Shape ). to Pas cal Case () Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġdefault Ġname Ġfor Ġa Ġmember Ġshape Ġ( for Ġcode Ġgeneration ), Ġe . g ., Ġ" bucketName " Ċ Ġ*/ Ċ fun ĠMember Shape . default Name (): ĠString Ġ= Ġmember Name . to Camel Case () Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġdefault Ġname Ġfor Ġa Ġmember Ġshape Ġ( for Ġcode Ġgeneration ), Ġe . g ., Ġ" Bucket Name " Ċ Ġ*/ Ċ fun ĠMember Shape . capital ized Default Name (): ĠString Ġ= Ġdefault Name (). replace First Char ( Char :: uppercase Char ) Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġdefault Ġname Ġfor Ġan Ġoperation Ġshape , Ġe . g ., Ġ" list Operations " Ċ Ġ*/ Ċ fun ĠOperation Shape . default Name (): ĠString Ġ= Ġid . name . to Camel Case () Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġcapital ized Ġdefault Ġname Ġfor Ġan Ġoperation Ġshape , Ġe . g ., Ġ" List Operations " Ċ Ġ*/ Ċ fun ĠOperation Shape . capital ized Default Name (): ĠString Ġ= Ġdefault Name (). replace First Char ( Char :: uppercase Char ) Ċ Ċ private Ġfun ĠString . sanitize Client Name (): ĠString Ġ= ĊĠĠĠ Ġreplace ( Regex ("( API | Client | Service )\ $", Ġset Of ( Regex Option . IGNORE _ CASE )), Ġ"") Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġgenerated ĠSDK Ġservice Ġclient Ġname Ġto Ġuse . Ċ Ġ* ĠSee Ġhttps :// aw sl abs . github . io / smithy / 1 . 0 / spec / aws / aws - core . html # using - sdk - service - id - for - client - naming Ċ Ġ* Ċ Ġ* Ġ@ param Ġraw ĠThe Ġraw Ġstring Ġthat Ġrepresents Ġthe Ġservice Ġname Ġ( usually Ġsettings . sdk Id ) Ċ Ġ*/ Ċ fun Ġclient Name ( raw : ĠString ): ĠString Ġ= Ġraw . sanitize Client Name (). to Pas cal Case () Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġ( un - validated ) Ġname Ġof Ġan Ġenum Ġvariant Ġfrom Ġthe Ġtrait Ġdefinition Ċ Ġ*/ Ċ fun ĠEnum Definition . variant Name (): ĠString Ġ{ ĊĠĠĠ Ġval Ġidentifier Ġ= Ġname . orElse Get Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġdon 't Ġwant Ġto Ġbe Ġdoing Ġthis ... name Ġyour Ġenums Ġpeople ĊĠĠĠĠĠĠĠ ĠLogger . getLogger (" Naming Utils "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . warning (" Using ĠEnum Definition . value Ġto Ġderive Ġgenerated Ġidentifier Ġname : Ġ$ value ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. split On Word Bound aries () ĊĠĠĠĠĠĠĠ Ġ. fold ( StringBuilder ()) Ġ{ Ġacc , Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurr Ġ= Ġx . lowercase (). replace First Char Ġ{ Ġc Ġ-> Ġc . uppercase Char () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( acc . isNotEmpty () Ġ&& Ġacc . last (). is Digit () Ġ&& Ġx . first (). is Digit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsplit Ġon Ġword Ġboundaries Ġcreated Ġdistinct Ġwords Ġfor Ġadjacent Ġdigits Ġe . g . Ġ" 1 1 . 4 " Ġ-> Ġ[" 1 1 " Ġ" 4 "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġseparate Ġthese Ġout Ġwith Ġ_ Ġas Ġthey Ġare Ġlikely Ġversions Ġstrings Ġof Ġsome Ġsort Ġwhere Ġa Ġseparation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgives Ġmeaning ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . append ("_ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc . append ( curr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc ĊĠĠĠĠĠĠĠ Ġ}. toString () ĊĠĠĠĠĠĠĠ Ġ. replace ( Regex (" ([ 0 - 9 ]+ _[ 0 - 9 ]+) ([ a - zA - Z ]) "), Ġ"$ 1 _$ 2 ") Ġ// Ġincrease Ġvisual Ġseparation : Ġ" Node Js _ 1 _ 2 Edge " Ġ-> Ġ" Node Js _ 1 _ 2 _ Edge " ĊĊĠĠĠ Ġreturn Ġwhen Ġ( isValid Kotlin Identifier ( identifier )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġidentifier ĊĠĠĠĠĠĠĠ Ġ// Ġattempt Ġto Ġprefix Ġit Ġ( e . g . Ġ` 0 ` Ġ-> Ġ`_ 0 `) ĊĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ"_ $ identifier " ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠGenerate Ġthe Ġunion Ġvariant Ġname Ġfrom Ġa Ġunion Ġmember Ġshape Ċ Ġ* Ġe . g . Ġ` Variant Name ` Ċ Ġ*/ Ċ fun ĠMember Shape . union Variant Name (): ĠString Ġ= Ġthis . member Name . to Pas cal Case () Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġname Ġof Ġthe Ġmiddleware Ġregistration Ġfunction Ġfor Ġan Ġoperation Ċ Ġ* Ġe . g . Ġ` register { Operation Name } Middleware Ċ Ġ*/ Ċ fun ĠOperation Shape . register Middleware Name (): ĠString Ġ= Ġ" register ${ this . capital ized Default Name ()} Middleware " Ċ