Current section
Files
Jump to
Current section
Files
src/gossamer/async_iterator.ffi.mjs
// src/gossamer/async_iterator.ffi.ts
import * as $option from "../../gleam_stdlib/gleam/option.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/async_iterator.ffi.ts
var new_ = (...[next2]) => {
const iterator = {
next: async (...[value]) => toIteratorResult(await next2(toOption(value)))
};
return iterator;
};
var with_return = (iterator, return_2) => {
const newIterator = {
...iterator,
return: async (value) => toIteratorResult(await return_2(toOption(value)))
};
return newIterator;
};
var with_throw = (iterator, throw_2) => {
const newIterator = {
...iterator,
throw: async (value) => toIteratorResult(await throw_2(toOption(value)))
};
return newIterator;
};
var next = async (iterator) => {
const result = await iterator.next();
return toGleamIteratorResult(result);
};
var next_with = async (iterator, value) => {
const result = await iterator.next(value);
return toGleamIteratorResult(result);
};
var return_ = async (iterator) => {
if (!iterator.return) {
throw new Error(void 0);
}
const result = await iterator.return();
return toGleamIteratorResult(result);
};
var return_with = async (iterator, value) => {
if (!iterator.return) {
throw new Error(void 0);
}
const result = await iterator.return(value);
return toGleamIteratorResult(result);
};
var throw_ = async (iterator, value) => {
if (!iterator.throw) {
throw new Error(void 0);
}
const result = await iterator.throw($option.unwrap(value, void 0));
return toGleamIteratorResult(result);
};
var for_await = async (iterator, fun) => {
while (true) {
const result = await iterator.next();
if (result.done) {
break;
}
await fun(result.value);
}
};
export {
for_await,
new_,
next,
next_with,
return_,
return_with,
throw_,
with_return,
with_throw
};