com.scalacraft.domain.v2.net.unconstrained

DomainName

Related Docs: object DomainName | package unconstrained

case class DomainName(labels: String*) extends Product with Serializable

A DomainName represents a name in the domain name system.

This class does not constrain the value of the domain name in anyway.

Unlike the example in Programming in Scala/2e the elements of the domain name are stored in the same order as used, i.e. as www.scalacraft.com, not reversed.

This implementation is case sensitive which is at variance with the Wikipedia specification. If a convincing use case for case insensitivity arises this could be reconsidered. Expressed in code we have,

DomainName("WWW") != DomainName("www")
Pattern Matching

Pattern matching is supported as the following example demonstrates,

"example.com" match {
case DomainName(label1, label2) => label1 :: label2 :: Nil  // List("example", "com")
case _ => None
}

Domain names with invalid labels will also be matched because this class is unconstrained,

"a.b-" match {
case DomainName(label1, label2) => label1 :: label2 :: Nil  // List("a", "b-")
case _ => None
}

To match an arbitrary number of domain name labels use a pattern sequence,

"www.example.com" match {
case DomainName(label, labels@_*) => labels  // "example"::"com"::Nil
}
Implicit Conversions

Implicit conversions exist which allow an instance of DomainName to be used when either a String or Seq[String] is required.

def countElements(seq: Seq[String]) = seq.length

val dn = DomainName("www", "example", "com")
val elemNo = countElements(dn) // 3

A conversion to an option of the constrained version of this class is also available.

Linear Supertypes
Serializable, Serializable, Product, Equals, AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. DomainName
  2. Serializable
  3. Serializable
  4. Product
  5. Equals
  6. AnyRef
  7. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new DomainName(labels: String*)

Value Members

  1. final def !=(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  5. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  7. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  8. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  9. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  10. val labels: String*

  11. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  12. final def notify(): Unit

    Definition Classes
    AnyRef
  13. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  14. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  15. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  16. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  17. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Serializable

Inherited from Serializable

Inherited from Product

Inherited from Equals

Inherited from AnyRef

Inherited from Any

Ungrouped