package Ġarrow . ref inement . strings Ċ Ċ import Ġarrow . ref inement . Ref ined Ċ import Ġarrow . ref inement . ensure Ċ import Ġkotlin . jvm . Jvm Inline Ċ Ċ @ Jvm Inline Ċ value Ġclass Ċ /** Ċ Ġ* Ġ[ IPv 6 ] Ġconstr ains Ġ[ String ] Ġto Ġbe Ġa Ġvalid ĠIPv 6 Ċ Ġ* Ċ Ġ* Ġ# ĠSafe Ġnullable Ġconstruction Ċ Ġ* Ċ Ġ* Ġ``` kotlin : ank Ċ Ġ* Ġimport Ġarrow . ref inement . strings . IPv 6 Ċ Ġ* Ċ Ġ* ĠIPv 6 . or Null (" 2 0 0 1 : 0 db 8 : 8 5 a 3 : 0 0 0 0 : 0 0 0 0 : 8 a 2 e : 0 3 7 0 : 7 3 3 4 ") Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ``` kotlin : ank Ċ Ġ* ĠIPv 6 . or Null (" abc ") Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ# ĠResolved Ġconstraints Ċ Ġ* Ċ Ġ* Ġ``` kotlin : ank Ċ Ġ* ĠIPv 6 . constraints (" 2 0 0 1 : 0 db 8 : 8 5 a 3 : 0 0 0 0 : 0 0 0 0 : 8 a 2 e : 0 3 7 0 : 7 3 3 4 ") Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ``` kotlin : ank Ċ Ġ* ĠIPv 6 . constraints (" abc ") Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ Ġ``` kotlin : ank Ċ Ġ* ĠIPv 6 . isValid (" 2 0 0 1 : 0 db 8 : 8 5 a 3 : 0 0 0 0 : 0 0 0 0 : 8 a 2 e : 0 3 7 0 : 7 3 3 4 ") Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ``` kotlin : ank Ċ Ġ* ĠIPv 6 . isValid (" abc ") Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ# ĠFold ing Ġvalidation Ċ Ġ* Ċ Ġ* Ġ``` kotlin : ank Ċ Ġ* ĠIPv 6 . fold (" 2 0 0 1 : 0 db 8 : 8 5 a 3 : 0 0 0 0 : 0 0 0 0 : 8 a 2 e : 0 3 7 0 : 7 3 3 4 ", Ġ{ Ġ" failed : Ġ$ it " Ġ}, Ġ{ Ġ" success : Ġ$ it " Ġ}) Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ``` kotlin : ank Ċ Ġ* ĠIPv 6 . fold (" abc ", Ġ{ Ġ" failed : Ġ$ it " Ġ}, Ġ{ Ġ" success : Ġ$ it " Ġ}) Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ# ĠUnsafe Ġrequire Ċ Ġ* Ċ Ġ* Ġ``` kotlin : ank Ċ Ġ* ĠIPv 6 . require (" 2 0 0 1 : 0 db 8 : 8 5 a 3 : 0 0 0 0 : 0 0 0 0 : 8 a 2 e : 0 3 7 0 : 7 3 3 4 ") Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ``` kotlin : ank Ċ Ġ* Ġtry Ġ{ ĠIPv 6 . require (" abc ") Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ Ġe . message Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ*/ Ċ IPv 6 Ġprivate Ġconstructor ( val Ġvalue : ĠString ) Ġ{ ĊĠ Ġcompanion Ġobject Ġ: ĠRef ined < String , ĠIPv 6 >( :: IPv 6 , Ġ{ ĊĠĠĠ Ġensure (( it . matches ( Companion . IPV 6 Regex )) Ġto Ġ(" Expected Ġ$ it Ġto Ġbe Ġan ĠIPv 6 Ġaddress ")) ĊĠ Ġ}) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCredit Ġfor Ġregex Ġgoes Ġto Ġhttps :// stackoverflow . com / questions / 5 3 4 9 7 / regular - expression - that - matches - valid - ipv 6 - addresses ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠIP V 6 Regex Ġ= ĊĠĠĠĠĠ Ġ" (([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 7 , 7 }[ 0 - 9 a - fA - F ]{ 1 , 4 }| ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 7 }: | ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 6 }: [ 0 - 9 a - fA - F ]{ 1 , 4 }| ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 5 } (: [ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 2 }| ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 4 } (: [ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 3 }| ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 3 } (: [ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 4 }| ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 2 } (: [ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 5 } |[ 0 - 9 a - fA - F ]{ 1 , 4 }: (( :[ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 6 }) |: (( :[ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 7 } |: )| fe 8 0 :( :[ 0 - 9 a - fA - F ]{ 0 , 4 } ){ 0 , 4 }% [ 0 - 9 a - zA - Z ]{ 1 , } |:: ( ffff (: 0 { 1 , 4 } ){ 0 , 1 }: ){ 0 , 1 } (( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ]) \\. ){ 3 , 3 }( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ]) | ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 4 }: (( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ]) \\. ){ 3 , 3 }( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ])) ". to Regex () ĊĠ Ġ} Ċ }