export class TodoApi2 extends Effect.Service<TodoApi2>()("TodoApi2", {
effect: Effect.gen(function* () {
const todosCollection = yield* TodosCollection;
const buildTodoApiUrl = yield* BuildTodoApiUrl;
return {
getTodo: Effect.gen(function* () {
const requestUrl = buildTodoApiUrl({
id: todosCollection[0]
});
const response = yield* Effect.tryPromise({
try: () => fetch(requestUrl),
catch: (error: any) => new FetchError({ message: error.message })
});
if (!response.ok) {
return yield* new FetchError({ message: response.statusText });
}
const json =
yield *
Effect.tryPromise({
try: () => response.json(),
catch: (error: any) => new JsonError({ message: error.message })
});
return yield* Schema.decodeUnknown(Todo)(json);
})
};
}),
dependencies: [TodosCollection.Default, BuildTodoApiUrl.Default]
}) {}
export class TodoApi2 extends Effect.Service<TodoApi2>()("TodoApi2", {
effect: Effect.gen(function* () {
const todosCollection = yield* TodosCollection;
const buildTodoApiUrl = yield* BuildTodoApiUrl;
return {
getTodo: Effect.gen(function* () {
const requestUrl = buildTodoApiUrl({
id: todosCollection[0]
});
const response = yield* Effect.tryPromise({
try: () => fetch(requestUrl),
catch: (error: any) => new FetchError({ message: error.message })
});
if (!response.ok) {
return yield* new FetchError({ message: response.statusText });
}
const json =
yield *
Effect.tryPromise({
try: () => response.json(),
catch: (error: any) => new JsonError({ message: error.message })
});
return yield* Schema.decodeUnknown(Todo)(json);
})
};
}),
dependencies: [TodosCollection.Default, BuildTodoApiUrl.Default]
}) {}