const decodeNormalizedTreasuryData = Schema.decodeUnknown(
AverageInterestRateTreasuryDataNormalized
);
const makeTreasuryRequest = (client: HttpClient.HttpClient) =>
client
.get(
'https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/avg_interest_rates'
)
.pipe(
Effect.catchTags({
ResponseError: () => Effect.fail(FailedGettingTreasuryData),
RequestError: () => Effect.fail(FailedGettingTreasuryData),
}),
Effect.scoped
);
class FailedGettingTreasuryData {
readonly _tag = 'FailedGettingTreasuryData';
}
const AverageInterestRatesHandler = HttpApiBuilder.group(
TreasuryDataSpec,
'Average Interest Rates on U.S. Treasury Securities',
(handlers) =>
handlers.handle('/avg_interest_rates', () =>
pipe(
HttpClient.HttpClient,
Effect.flatMap(makeTreasuryRequest), // normal api call
Effect.map((clientResponse) => clientResponse.toJSON()),// turn to json
decodeNormalizedTreasuryData // decodes it from unknown to a schema and the schema remaps the keys.
)
)
)
const decodeNormalizedTreasuryData = Schema.decodeUnknown(
AverageInterestRateTreasuryDataNormalized
);
const makeTreasuryRequest = (client: HttpClient.HttpClient) =>
client
.get(
'https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/avg_interest_rates'
)
.pipe(
Effect.catchTags({
ResponseError: () => Effect.fail(FailedGettingTreasuryData),
RequestError: () => Effect.fail(FailedGettingTreasuryData),
}),
Effect.scoped
);
class FailedGettingTreasuryData {
readonly _tag = 'FailedGettingTreasuryData';
}
const AverageInterestRatesHandler = HttpApiBuilder.group(
TreasuryDataSpec,
'Average Interest Rates on U.S. Treasury Securities',
(handlers) =>
handlers.handle('/avg_interest_rates', () =>
pipe(
HttpClient.HttpClient,
Effect.flatMap(makeTreasuryRequest), // normal api call
Effect.map((clientResponse) => clientResponse.toJSON()),// turn to json
decodeNormalizedTreasuryData // decodes it from unknown to a schema and the schema remaps the keys.
)
)
)