the-algorithm/tweetypie/common/src/scala/com/twitter/tweetypie/tweettext/TextEntity.scala

25 lines
771 B
Scala

package com.twitter.tweetypie.tweettext
/**
* A type class for entities found within a piece of tweet text.
*/
trait TextEntity[T] {
def fromIndex(entity: T): Short
def toIndex(entity: T): Short
def move(entity: T, fromIndex: Short, toIndex: Short): T
}
object TextEntity {
def fromIndex[T: TextEntity](entity: T): Short =
implicitly[TextEntity[T]].fromIndex(entity)
def toIndex[T: TextEntity](entity: T): Short =
implicitly[TextEntity[T]].toIndex(entity)
def move[T: TextEntity](entity: T, fromIndex: Short, toIndex: Short): T =
implicitly[TextEntity[T]].move(entity, fromIndex, toIndex)
def shift[T: TextEntity](entity: T, offset: Short): T =
move(entity, (fromIndex(entity) + offset).toShort, (toIndex(entity) + offset).toShort)
}