dnd dice
This commit is contained in:
commit
dc3b5351dd
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
Cargo.lock
|
|
@ -0,0 +1,19 @@
|
|||
[package]
|
||||
name = "dnd_dice"
|
||||
version = "0.1.0"
|
||||
authors = ["Christine Dodrill <me@christine.website>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
[dependencies]
|
||||
dnd_dice_roller = "0.3"
|
||||
mlua = { version = "0.4", features = ["lua53", "module", "async"] }
|
||||
mlua_derive = "0.4"
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
||||
opt-level = "s"
|
|
@ -0,0 +1,14 @@
|
|||
{ pkgs ? import <nixpkgs> { } }:
|
||||
|
||||
pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
rustc
|
||||
cargo
|
||||
rls
|
||||
rustfmt
|
||||
cargo-watch
|
||||
pkg-config
|
||||
lua5_3
|
||||
bashInteractive
|
||||
];
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
#[macro_use]
|
||||
extern crate mlua_derive;
|
||||
use std::str::FromStr;
|
||||
use dnd_dice_roller::{dice::{Dice, DiceResult}, error::DiceError};
|
||||
use mlua::{prelude::*, Table, Error};
|
||||
use std::sync::Arc;
|
||||
|
||||
fn roll(lua: &Lua, roll: String) -> LuaResult<Table> {
|
||||
match dice_roll(roll) {
|
||||
Ok(res) => {
|
||||
let result = lua.create_table()?;
|
||||
|
||||
if res.final_result.len() == 1 {
|
||||
result.set("result", res.final_result[0])?;
|
||||
} else {
|
||||
result.set("result", res.final_result)?;
|
||||
}
|
||||
|
||||
result.set("first", res.dice_results.first_roll)?;
|
||||
|
||||
if let Some(roll) = res.dice_results.second_roll {
|
||||
result.set("second", roll)?;
|
||||
}
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
Err(why) => {
|
||||
Err(Error::ExternalError(Arc::new(why)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn dice_roll<T: Into<String>>(roll: T) -> Result<DiceResult, DiceError> {
|
||||
let mut dice = Dice::from_str(&roll.into())?;
|
||||
|
||||
if dice.number_of_dice_to_roll > 100 {
|
||||
dice.number_of_dice_to_roll = 100;
|
||||
}
|
||||
|
||||
if dice.sides > 100 {
|
||||
dice.sides = 100
|
||||
}
|
||||
|
||||
if dice.sides == 0 {
|
||||
dice.sides = 6;
|
||||
}
|
||||
|
||||
Ok(dice.roll_dice())
|
||||
}
|
||||
|
||||
#[lua_module]
|
||||
fn dnd_dice(lua: &Lua) -> LuaResult<LuaFunction> {
|
||||
Ok(lua.create_function(roll)?)
|
||||
}
|
Loading…
Reference in New Issue