DevOp.Toon.Client is a thin integration layer over HttpClient and IToonService.
HttpClientHandler.AutomaticDecompressionIToonServiceX-Toon-Option-* header injection from ResponseEncodeOverridesToonClientException (Content, ContentType, StatusCode, Decode<T>())ILogger<ToonClient>It does not own serialization logic. All encode and decode behavior is delegated to IToonService from DevOp.Toon.
IToonClient.cs — the public interface; all application code depends only on thisToonClient.cs — sealed implementation; wraps HttpClient and IToonServiceToonClientOptions.cs — configuration: base address, timeout, compression, encode/decode options, response overrides, JSON fallback settingsToonResponseEncodeOverrideOptions.cs — nullable properties that map to X-Toon-Option-* headersToonClientException.cs — thrown on non-2xx responses, deserialization failure, or unsupported content type; carries raw response context and Decode<T>()ToonClientServiceCollectionExtensions.cs — AddToonClient(...) registrationIToonClientToonClient encodes the request body as TOON via IToonServiceAccept header is set: application/toon (1.0), text/toon (0.9), application/json (0.8)ResponseEncodeOverrides properties are sent as X-Toon-Option-* headersHttpClient dispatches the request; the primary handler decompresses the response automatically when EnableCompression is trueToonClientException with StatusCode, Content, ContentType, and a Decode<T>() delegateContent-Type is inspected: TOON types → IToonService decode; JSON types → System.Text.Json; anything else → ToonClientExceptionnullDevOp.Toon.Core
DevOp.Toon ← provides IToonService, ToonEncodeOptions, ToonDecodeOptions
↓
DevOp.Toon.Client ← this package
DevOp.Toon.Client does not depend on DevOp.Toon.API. The two packages are independent transport layers — one for the server side, one for the client side.
AddToonClient(...) returns have no effectToonClient is sealed and registered as a typed HttpClient — it uses the standard IHttpClientFactory lifecycleAddToonClient(...) calls AddToon() internally if IToonService is not already registered, so you do not need to call bothILogger<ToonClient> is resolved from DI automatically; when absent no logging is produced (null-safe throughout)ToonClientException captures a decoder delegate at throw time using the live IToonService and ToonClientOptions state, so Decode<T>() respects the same options the client used for the original response