Current section

Files

Jump to
gossamer src gossamer iterator.ffi.mjs
Raw

src/gossamer/iterator.ffi.mjs

// src/gossamer/iterator.ffi.ts
import * as $option from "../../gleam_stdlib/gleam/option.mjs";
import { Result$Error, Result$Ok } from "../../prelude.mjs";
// src/gossamer/iterator_result.ts
import * as $iteratorResult from "./iterator_result.mjs";
function toIteratorResult(result) {
if ($iteratorResult.IteratorResult$isReturn(result)) {
return {
done: true,
value: $iteratorResult.IteratorResult$Return$value(result)
};
}
return {
done: false,
value: $iteratorResult.IteratorResult$Yield$value(result)
};
}
function toGleamIteratorResult(result) {
if (result.done) {
return $iteratorResult.IteratorResult$Return(result.value);
}
return $iteratorResult.IteratorResult$Yield(result.value);
}
// src/utils/option.ts
import {
Option$None,
Option$Some
} from "../../gleam_stdlib/gleam/option.mjs";
function toOption(value) {
return value === null || value === void 0 ? Option$None() : Option$Some(value);
}
// src/gossamer/iterator.ffi.ts
var new_ = (...[next2]) => {
const iterator = {
next: (...[value]) => toIteratorResult(next2(toOption(value)))
};
return iterator;
};
var with_return = (iterator, return_2) => {
const newIterator = {
...iterator,
return: (value) => toIteratorResult(return_2(toOption(value)))
};
return newIterator;
};
var with_throw = (iterator, throw_2) => {
const newIterator = {
...iterator,
throw: (value) => toIteratorResult(throw_2(toOption(value)))
};
return newIterator;
};
var next = (iterator) => {
const result = iterator.next();
return toGleamIteratorResult(result);
};
var next_with = (iterator, value) => {
const result = iterator.next(value);
return toGleamIteratorResult(result);
};
var return_ = (iterator) => {
if (!iterator.return) {
return Result$Error(void 0);
}
const result = iterator.return();
return Result$Ok(toGleamIteratorResult(result));
};
var return_with = (iterator, value) => {
if (!iterator.return) {
return Result$Error(void 0);
}
const result = iterator.return(value);
return Result$Ok(toGleamIteratorResult(result));
};
var throw_ = (iterator, reason) => {
if (!iterator.throw) {
return Result$Error(void 0);
}
const result = iterator.throw($option.unwrap(reason, void 0));
return Result$Ok(toGleamIteratorResult(result));
};
var for_ = (iterator, fun) => {
while (true) {
const result = iterator.next();
if (result.done) {
break;
}
fun(result.value);
}
};
export {
for_,
new_,
next,
next_with,
return_,
return_with,
throw_,
with_return,
with_throw
};