| 146 | * @since 4.0.0 |
| 147 | */ |
| 148 | export const findOneOption = <Req extends Schema.Constraint, Res extends Schema.Constraint, E, R>( |
| 149 | options: { |
| 150 | readonly Request: Req |
| 151 | readonly Result: Res |
| 152 | readonly execute: (request: Req["Encoded"]) => Effect.Effect<ReadonlyArray<unknown>, E, R> |
| 153 | } |
| 154 | ) => { |
| 155 | const encodeRequest = Schema.encodeEffect(options.Request) |
| 156 | const decode = Schema.decodeUnknownEffect(options.Result) |
| 157 | return ( |
| 158 | request: Req["Type"] |
| 159 | ): Effect.Effect< |
| 160 | Option.Option<Res["Type"]>, |
| 161 | E | Schema.SchemaError, |
| 162 | R | Req["EncodingServices"] | Res["DecodingServices"] |
| 163 | > => |
| 164 | Effect.flatMap( |
| 165 | Effect.flatMap(encodeRequest(request), options.execute), |
| 166 | (arr): Effect.Effect< |
| 167 | Option.Option<Res["Type"]>, |
| 168 | Schema.SchemaError, |
| 169 | Req["EncodingServices"] | Res["DecodingServices"] |
| 170 | > => Arr.isReadonlyArrayNonEmpty(arr) ? Effect.asSome(decode(arr[0])) : Effect.succeedNone |
| 171 | ) |
| 172 | } |