Namespace Search
    Public Class SearchToken

        Public Enum [ValueType]
            AttributeName
            AttributeValue
            AttributeOperator
        End Enum

        Public Enum [InputMode]
            [Default]
            [Operator]
            Value
        End Enum

        Public Enum [OperatorToken]
            Equals
            NotEquals
            GreaterThan
            LessThan
            Contains
        End Enum

        Public MustInherit Class TokenValue
            Public Value As Object
            Public Type As [ValueType]

            Public Overrides Function ToString() As String
                Return Value.ToString()
            End Function
        End Class

        Public Class AttributeKeyToken
            Inherits TokenValue

            Public Sub New(pValue As Object)
                Value = pValue
                Type = ValueType.AttributeName
            End Sub
        End Class

        Public Class AttributeOperatorToken
            Inherits TokenValue

            Public Sub New(pValue As Object)
                Value = pValue
                Type = ValueType.AttributeOperator
            End Sub
        End Class

        Public Class AttributeValueToken
            Inherits TokenValue

            Public Sub New(pValue As Object)
                Value = pValue
                Type = ValueType.AttributeValue
            End Sub
        End Class

        Public Class DateToken
            Inherits TokenValue

            Public Sub New(pValue As Object)
                Value = pValue
                Type = ValueType.AttributeValue
            End Sub
        End Class
    End Class

End Namespace