Skip to content
This repository has been archived by the owner on Apr 16, 2023. It is now read-only.

Add Arguments types for all primitives #33

Open
wants to merge 2 commits into
base: 0.4.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions runtime/src/main/kotlin/argument/primitive/ByteArgument.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package dev.kord.x.commands.argument.primitive

import dev.kord.x.commands.argument.SingleWordArgument
import dev.kord.x.commands.argument.result.WordResult

internal class InternalByteArgument(
override val name: String = "Number",
private val radix: Int = 10
) :
SingleWordArgument<Byte, Any?>() {

override suspend fun parse(word: String, context: Any?): WordResult<Byte> =
when (val number = word.toByteOrNull(radix)) {
null -> failure("Expected a number.")
else -> success(number)
}
}

/**
* Argument that matches against a single world,
* emitting success when the word is a valid [Byte] value.
*/
val ByteArgument: dev.kord.x.commands.argument.Argument<Byte, Any?> = InternalByteArgument()

/**
* Argument with [name] and [radix] that matches against a single world,
* emitting success when the word is a valid [Byte] value.
*/
@Suppress("FunctionName")
fun ByteArgument(name: String, radix: Int = 10): dev.kord.x.commands.argument.Argument<Byte, Any?> =
InternalByteArgument(name, radix)
26 changes: 26 additions & 0 deletions runtime/src/main/kotlin/argument/primitive/FloatArgument.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package dev.kord.x.commands.argument.primitive

import dev.kord.x.commands.argument.SingleWordArgument
import dev.kord.x.commands.argument.result.WordResult

internal class InternalFloatArgument(override val name: String = "Number") :
SingleWordArgument<Float, Any?>() {

override suspend fun parse(word: String, context: Any?): WordResult<Float> =
when (val number = word.toFloatOrNull()) {
null -> failure("Expected a number.")
else -> success(number)
}
}

/**
* Argument that matches against a single world, emitting success when the word is a valid [Float] value.
*/
val FloatArgument: dev.kord.x.commands.argument.Argument<Float, Any?> = InternalFloatArgument()

/**
* Argument with [name] that matches against a single world, emitting success when the word is a valid [Float] value.
*/
@Suppress("FunctionName")
fun FloatArgument(name: String): dev.kord.x.commands.argument.Argument<Float, Any?> =
InternalFloatArgument(name)
17 changes: 11 additions & 6 deletions runtime/src/main/kotlin/argument/primitive/IntArgument.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,31 @@ package dev.kord.x.commands.argument.primitive
import dev.kord.x.commands.argument.SingleWordArgument
import dev.kord.x.commands.argument.result.WordResult

internal class InternalIntArgument(override val name: String = "Number") :
internal class InternalIntArgument(
override val name: String = "Number",
private val radix: Int = 10
) :
SingleWordArgument<Int, Any?>() {
override suspend fun parse(
word: String,
context: Any?
): WordResult<Int> = when (val number = word.toIntOrNull()) {
): WordResult<Int> = when (val number = word.toIntOrNull(radix)) {
null -> failure("Expected a whole number.")
else -> success(number)
}

}

/**
* Argument that matches against a single world, emitting success when the word is a valid integer value.
* Argument that matches against a single world,
* emitting success when the word is a valid [Int] value.
*/
val IntArgument: dev.kord.x.commands.argument.Argument<Int, Any?> = InternalIntArgument()

/**
* Argument with [name] that matches against a single world, emitting success when the word is a valid integer value.
* Argument with [name] and [radix] that matches against a single world,
* emitting success when the word is a valid [Int] value.
*/
@Suppress("FunctionName")
fun IntArgument(name: String): dev.kord.x.commands.argument.Argument<Int, Any?> =
InternalIntArgument(name)
fun IntArgument(name: String, radix: Int = 10): dev.kord.x.commands.argument.Argument<Int, Any?> =
InternalIntArgument(name, radix)
17 changes: 11 additions & 6 deletions runtime/src/main/kotlin/argument/primitive/LongArgument.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,32 @@ package dev.kord.x.commands.argument.primitive
import dev.kord.x.commands.argument.SingleWordArgument
import dev.kord.x.commands.argument.result.WordResult

internal class InternalLongArgument(override val name: String = "Number") :
internal class InternalLongArgument(
override val name: String = "Number",
private val radix: Int = 10
) :
SingleWordArgument<Long, Any?>() {

override suspend fun parse(
word: String,
context: Any?
): WordResult<Long> = when (val number = word.toLongOrNull()) {
): WordResult<Long> = when (val number = word.toLongOrNull(radix)) {
null -> failure("Expected a number.")
else -> success(number)
}

}

/**
* Argument that matches against a single world, emitting success when the word is a valid long value.
* Argument that matches against a single world,
* emitting success when the word is a valid [Long] value.
*/
val LongArgument: dev.kord.x.commands.argument.Argument<Long, Any?> = InternalLongArgument()

/**
* Argument with [name] that matches against a single world, emitting success when the word is a valid long value.
* Argument with [name] and [radix] that matches against a single world,
* emitting success when the word is a valid [Long] value.
*/
@Suppress("FunctionName")
fun LongArgument(name: String): dev.kord.x.commands.argument.Argument<Long, Any?> =
InternalLongArgument(name)
fun LongArgument(name: String, radix: Int = 10): dev.kord.x.commands.argument.Argument<Long, Any?> =
InternalLongArgument(name, radix)
32 changes: 32 additions & 0 deletions runtime/src/main/kotlin/argument/primitive/ShortArgument.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package dev.kord.x.commands.argument.primitive

import dev.kord.x.commands.argument.SingleWordArgument
import dev.kord.x.commands.argument.result.WordResult

internal class InternalShortArgument(override val name: String = "Number", private val radix: Int) :
SingleWordArgument<Short, Any?>() {

override suspend fun parse(word: String, context: Any?): WordResult<Short> =
when (val number = word.toShortOrNull(radix)) {
null -> failure("Expected a number.")
else -> success(number)
}
}

/**
* Argument that matches against a single world,
* emitting success when the word is a valid [Short] value.
*/
val ShortArgument: dev.kord.x.commands.argument.Argument<Short, Any?> =
InternalShortArgument(radix = 10)

/**
* Argument with [name] and [radix] that matches against a single world,
* emitting success when the word is a valid [Short] value.
*/
@Suppress("FunctionName")
fun ShortArgument(
name: String,
radix: Int = 10
): dev.kord.x.commands.argument.Argument<Short, Any?> =
InternalShortArgument(name, radix)