Bring the Rust [Result Option] types to Crystal
-
Add the dependency to your
shard.yml:dependencies: types: github: initdc/types.cr
-
Run
shards install
require "types"
s = Some[0]
n = None(Int32)[]
r = Ok(Int32, String)[0]
e = Err(Int32, String)["error"]
puts "s: #{s}"
puts "n: #{n}"
puts "r: #{r}"
puts "e: #{e}"
arr = [0, 1, 2]
p arr[0]
p Option.from(arr[0])
p arr[10]?
p Option.from?(arr[10]?)
p Option.from! { arr[10] }Just use the Union(*T) type from Crystal itself.
def div?(a : Float64, b : Float64) : Float64?
return if b == 0
a / b
end
p div?(10, 2)
p div?(10, 0)
def div(a : Float64, b : Float64) : Float64 | String
return "Division by zero" if b == 0
a / b
end
p div(10, 2)
p div(10, 0)- Fork it (https://github.com/initdc/types.cr/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
- initdc - creator and maintainer