Skip to content

Conversation

@KhaledChehabeddine
Copy link

Description

Related Issue

Fixes #(issue number)

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Performance improvement
  • Code refactoring

How Has This Been Tested?

  • Unit tests pass (go test ./...)
  • Integration tests pass
  • Golden file tests updated (if applicable) - UPDATE_GOLDEN=1 go test -run TestExhaustiveGoldenFiles
  • Test coverage meets threshold (85%)
  • Manual testing performed

Test Configuration

  • Go version:
  • OS:
  • Protoc version:

Checklist

  • My code follows the project's style guidelines (go fmt ./...)
  • I have performed a self-review of my code
  • I have commented my code where necessary
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • I have updated CLAUDE.md if this changes how the codebase works

Breaking Changes

Screenshots/Examples

Additional Notes

KhaledChehabeddine and others added 14 commits December 12, 2025 00:24
Add Swift package manifest with dependencies on SwiftProtobuf (1.33.3)
and ArgumentParser (1.6.2). Include standard Swift package .gitignore
and resolved dependencies for reproducible builds.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add foundational HTTP client infrastructure:
- SebufClient protocol with async/throws error handling
- DefaultSebufClient actor-based implementation using URLSession
- DataTask for handling typed request/response workflows
- SebufError enum with comprehensive error handling (cancellation, URL errors, undefined errors)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add protocol definitions for Sebuf HTTP framework:
- SebufRoute protocol for typed request/response routing with SwiftProtobuf integration
- SebufService protocol for service-level header management
- Configuration infrastructure with type-safe configuration keys and values

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add basic test suite setup for SwiftSebuf package using Swift Testing framework.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…ents

Split monolithic Configuration.swift into separate files:
- Configuration.swift: Core ConfigurationKey protocol and ConfigurationValues
- ConfigurationValues+Customization.swift: Extension with baseURLString and client properties

This improves code organization and separates concerns between the configuration
infrastructure and the actual configuration values.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…ling

- Remove ClientError associatedtype for cleaner protocol design
- Add default implementation of data(for:) using URLSession
- Rename dataTask to networkTask for better clarity
- Update method signatures to use standardized SebufError

This simplification makes the protocol easier to adopt and removes
unnecessary type constraints while maintaining type safety.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Rename DataTask to NetworkTask and add complete implementation:
- Add configuration-based URL request construction
- Implement makeURLRequest helper using baseURLString from configurations
- Add Sendable conformance for safe concurrency
- Complete data() method to execute network requests

NetworkTask now provides a fully functional network layer that integrates
with the configuration system and route definitions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Implement response(from:) method that:
- Creates a NetworkTask from the client
- Executes the network request
- Decodes JSON response data into the typed Response
- Configures JSON decoder to ignore unknown fields

This provides a clean, type-safe API for executing routes and
automatically handling response deserialization.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…urationValues

Change from ObjectIdentifier to String(reflecting:) for type keys to support
all Swift types (structs, enums, classes) instead of only class types.
Also removes unnecessary SwiftUI import dependency.

This maintains the same API while providing better type compatibility
and fixes the limitation where ObjectIdentifier only works reliably
with class metatypes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Simplify SebufClient protocol:
- Remove async/throws from networkTask (no I/O at task creation)
- Remove generic Client type parameter from NetworkTask
- Remove redundant data(for:) method

Improve DefaultSebufClient:
- Store ConfigurationValues internally
- Remove error wrapping in data method
- Simplify networkTask creation

This makes the client API cleaner and moves configuration
responsibility to where it belongs (in the client itself).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…orkTask

Enhance NetworkTask with complete request handling:
- Add request body encoding using SwiftProtobuf's jsonUTF8Data
- Configure JSON encoder to preserve proto field names
- Replace data() method with async 'value' computed property
- Access URLSession directly instead of through client wrapper

This completes the request/response pipeline with proper
protobuf serialization support.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…lution

Change route resolution API:
- Rename response(from:) to resolve(in:) for clearer semantics
- Accept ConfigurationValues instead of SebufClient directly
- Access client through configuration for better dependency flow

This makes the API more intuitive - routes are resolved within
a configuration context rather than from a specific client.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add empty SimpleService.swift test file as a placeholder for
future service implementation tests.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add SimpleService test service implementation:
- Implement SebufService with getSimple RPC method
- Add GetSimple route with proper request/response types
- Include mock GetSimpleRequest and GetSimpleResponse messages
- Configure test headers for API key validation

Remove auto-generated SwiftSebufTests.swift template file as it's
replaced with actual service test implementation.

Note: Mock messages will be replaced with proper proto-generated
code once the test proto files are finalized.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@KhaledChehabeddine KhaledChehabeddine changed the title 🐦 Introduce Swift HTTP Code Generation feat(Swift): 🐦 Introduce Swift HTTP Code Generation Dec 20, 2025
KhaledChehabeddine and others added 15 commits December 21, 2025 00:43
Replace property wrapper-based configuration system with simplified
key-value architecture. Implement thread-safe storage using
os_unfair_lock and copy-on-write semantics. Remove client configuration
key in favor of direct client injection via protocols.

Changes:
- Add ConfigurationKey protocol with default value support
- Implement ConfigurationValues with thread-safe Storage class
- Add baseURLString network configuration (non-optional)
- Remove Configurations property wrapper
- Remove client configuration key
- Use ObjectIdentifier for type-safe key lookup

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Improve SebufClient protocol to support direct service instantiation
and explicit configuration passing. Add generic service() method for
type-safe service creation and convenience static factory.

Changes:
- Add configurations property to SebufClient protocol
- Add nonisolated service<S>() method for service instantiation
- Move networkTask() to internal protocol extension
- Update DefaultSebufClient with configurations parameter
- Add static .default() convenience factory
- Update SebufService to require Client associatedtype
- Replace headers property with client-based initialization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Replace generic Error with typed SebufError throughout network and
routing layers. Rename route resolution method for clarity and add
proper error wrapping for encoding/decoding failures.

Changes:
- Add messageEncoding and messageDecoding cases to SebufError
- Make NetworkTask generic over Client type (internal)
- Add typed throws(SebufError) to NetworkTask.value
- Wrap URLSession errors in SebufError.init(_:)
- Wrap protobuf encoding/decoding errors
- Rename resolve(in:) to response(from:) in SebufRoute
- Change to client-based API from configuration-based
- Remove optional baseURLString (now required)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Adapt SimpleService test implementation to use new service protocol
requirements and client-based routing API. Add generic Client type
parameter and update route resolution.

Changes:
- Make SimpleService generic over Client: SebufClient
- Replace @Configurations property wrapper with client injection
- Update getSimple() to use response(from:) instead of resolve(in:)
- Add typed throws(SebufError) signature
- Keep private headers for future use

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add session property to ConfigurationValues for network configuration.
Enables custom URLSession injection while maintaining .shared as default.

Changes:
- Add session computed property to ConfigurationValues
- Add SessionConfigurationKey with URLSession.shared default
- Move session from SebufClient to configuration layer

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Standardize naming across client and routing APIs following Swift
conventions. Use singular 'configuration', 'make' prefix for factories,
and 'path' for route endpoints.

Changes:
- Rename configurations → configuration (singular)
- Rename service() → makeService() (factory pattern)
- Rename networkTask(for:) → makeTask(route:)
- Rename route property → path (clearer intent)
- Rename response(from:) → makeResponse(client:)
- Remove session parameter from DefaultSebufClient init
- Update static factory to match new naming

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Move makeURLRequest from SebufRoute extension to private NetworkTask
method. Improves separation of concerns following Apple conventions -
routes describe endpoints, NetworkTask handles execution.

Changes:
- Move makeURLRequest to private NetworkTask method
- Remove SebufRoute extension with fileprivate method
- Add async to makeURLRequest for configuration access
- Remove configurations parameter from NetworkTask init
- Access configuration directly from client
- Simplify explicit type annotations

Benefits:
- Routes stay declarative (path + request only)
- NetworkTask owns request building logic
- Better encapsulation of implementation details
- Cleaner async/await flow without parameter passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add dedicated invalidURL error case to distinguish URL construction
failures from request validation failures.

Changes:
- Add invalidURL case to SebufError enum
- Use invalidURL for URL(string:) failures in makeURLRequest

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Update test implementation to use renamed route and method names.

Changes:
- Rename route property → path
- Update response(from:) → makeResponse(client:)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Rename SebufClient -> HTTPClient, SebufService -> Service, and SebufRoute -> Endpoint for improved API clarity and consistency. This aligns the naming with the actual responsibilities of each component.

Changes:
- HTTPClient: Protocol for HTTP client implementations
- Service: Protocol for service definitions
- Endpoint: Protocol for individual API endpoints
- DefaultClient: Default HTTPClient implementation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Introduce Configurable protocol enabling fluent configuration API similar to SwiftUI's environment pattern. Update ConfigurationValues to support URL-based baseURL and request modifiers array.

Changes:
- Configurable protocol with fluent configuration methods
- Updated ConfigurationValues with baseURL (URL?) and requestModifiers
- Convenience methods: baseURL() and requestModifiers()

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add RequestModifier protocol and HeaderModifier implementation for customizing URLRequests. This enables flexible request modification at client, service, and endpoint levels.

Changes:
- RequestModifier protocol for URLRequest mutation
- HeaderModifier for setting HTTP headers
- Support for cascading modifiers through configuration layers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Update NetworkTask to work with renamed protocols (HTTPClient, Endpoint) and integrate request modifier support. Simplify URL request building by using URL appending and move session access to client.

Changes:
- Use HTTPClient and Endpoint protocols
- Apply request modifiers from endpoint configuration
- Move response decoding into NetworkTask.value
- Use URL.appending(path:) for cleaner URL construction
- Access session directly from client instead of configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Replace SimpleService with comprehensive UserService test implementation demonstrating the new architecture including cascading configuration, endpoint implementation, and Configurable protocol usage.

Changes:
- Remove SimpleService test stub
- Add UserService with CreateUser endpoint example
- Demonstrate service-level and endpoint-level configuration
- Include mock CreateUserRequest/Response messages for testing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Move configuration property declaration to Configurable protocol to reduce boilerplate. Remove duplicate declarations from HTTPClient, Service, and Endpoint. Add default implementation supporting both value and reference types.

Changes:
- Configurable now declares configuration property requirement
- Default implementation of configuration(_:_:) for all conforming types
- Remove redundant nonisolated requirement from HTTPClient
- Rename Endpoint.makeResponse() to response computed property
- Cleaner API with single source of truth for configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
KhaledChehabeddine and others added 24 commits December 29, 2025 00:18
Add Serializer protocol with JSON and Binary implementations for content serialization. Supports custom encoding/decoding options and typed error handling with SebufError.

Changes:
- Serializer protocol for pluggable serialization strategy
- JSONSerializer with configurable JSONEncodingOptions/JSONDecodingOptions
- BinarySerializer with configurable BinaryEncodingOptions/BinaryDecodingOptions
- Static factory methods (.json(), .binary()) for convenient creation
- Support for extensions and partial message handling in binary serialization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add serializer configuration value with JSON as default. Update NetworkTask to use configurable serializer for request/response serialization instead of hardcoded JSON.

Changes:
- Add serializer property to ConfigurationValues (defaults to .json())
- Add serializer(_:) convenience method to Configurable
- Update NetworkTask to use configuration.serializer for encoding/decoding
- Remove hardcoded JSON encoding/decoding options from NetworkTask
- Simplify NetworkTask initialization by removing Client generic parameter

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Remove manual configuration(_:_:) implementations now provided by Configurable protocol default implementation. Update endpoint to use response computed property instead of makeResponse() method.

Changes:
- Remove duplicate configuration(_:_:) method from UserService
- Remove duplicate configuration(_:_:) method from CreateUserEndpoint
- Update CreateUserEndpoint.makeResponse() to response computed property

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add empty scaffold for buf-gen-swift protoc plugin module and tests. This will house the Swift code generator for sebuf HTTP services.

Changes:
- Add buf-gen-swift module structure
- Add buf-gen-swiftTests test module structure
- Empty SebufGenerator.swift and Test.swift files as placeholders

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add buf-gen-swift module and tests to Swift package configuration. Update SwiftSebuf target dependencies to remove unused protoc plugin dependencies.

Changes:
- Add buf-gen-swift product and target
- Add buf-gen-swiftTests target
- Configure buf-gen-swift dependencies (ArgumentParser, SwiftProtobuf, PluginLibrary, SwiftSebuf)
- Remove ArgumentParser and PluginLibrary dependencies from SwiftSebuf target
- Improve Package.swift formatting and organization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add swift/.swiftpm/ to .gitignore to exclude SPM build artifacts and state.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add contentType property to Serializer protocol and implement it in JSONSerializer and BinarySerializer. Update NetworkTask to automatically set Content-Type header based on configured serializer.

Changes:
- Add contentType property to Serializer protocol
- Implement contentType in JSONSerializer ("application/json")
- Implement contentType in BinarySerializer ("application/x-protobuf")
- NetworkTask automatically sets Content-Type header from serializer
- Remove commented-out old ContentSerializer protocol definition

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add retry policy system with configurable attempts, retryable status codes, and flexible backoff strategies including instant, constant, exponential, and custom delays.

Changes:
- RetryPolicy struct with maxAttempts, retryableStatusCodes, backoffStrategy
- BackoffStrategy enum supporting instant, constant, exponential, and custom delays
- RetryAsyncSequence for async iteration over retry attempts
- Default .none policy for single-attempt requests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add NetworkLogger protocol and DefaultLogger implementation for request/response observability. Enables debugging, monitoring, and tracing of network operations.

Changes:
- NetworkLogger protocol with logRequest, logResponse, logError methods
- DefaultLogger with configurable log levels (none, error, info, debug)
- Support for logging request details, response data, and error information
- Endpoint path tracking for contextual logging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add ResponseValidator for configurable response validation including status code ranges and Content-Type checking. Includes default, permissive, and strict presets.

Changes:
- ResponseValidator struct with validStatusCodes and validateContentType
- Static presets: .default (200-299), .permissive (200-599), .strict (200 only)
- Enables per-request customization of validation rules
- Foundation for response validation in NetworkTask

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Change SebufError init from 'any Error' to 'some Error' for better type inference and performance. Minor refactoring for improved Swift type system usage.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add essential configuration values for production-ready HTTP requests including headers, timeoutInterval, cachePolicy, retryPolicy, logger, and responseValidator.

Changes:
- Add headers dictionary for custom HTTP headers (auth, tracing, etc.)
- Add timeoutInterval for per-request timeout control
- Add cachePolicy for cache behavior configuration
- Add retryPolicy for automatic retry with backoff
- Add logger for observability and debugging
- Add responseValidator for response validation
- Mark all properties as public internal(set) for controlled mutation
- Add convenience methods to Configurable for fluent API

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Integrate retry policy, network logger, and response validator into NetworkTask. Add automatic retry with backoff, comprehensive logging, and header-based configuration.

Changes:
- Integrate RetryAsyncSequence for automatic retry with backoff
- Add logging for requests, responses, and errors
- Replace requestModifiers with direct headers dictionary application
- Add cachePolicy and timeoutInterval to URLRequest initialization
- Add retryAsyncSequence computed property on ConfigurationValues
- Check retryable status codes and continue retry loop accordingly
- Improve error handling with endpoint context

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Remove HeaderModifier and RequestModifier in favor of direct headers dictionary configuration. Simplifies API by using built-in dictionary instead of custom modifier pattern.

Changes:
- Delete HeaderModifier.swift (replaced by headers dictionary)
- Delete RequestModifier.swift (replaced by headers dictionary)
- Headers now configured directly via ConfigurationValues.headers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Update minimum platform requirement from macOS 14 to macOS 15 for latest Swift concurrency and Duration API support.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Remove Configurable conformance and configuration management from HTTPClient. HTTPClient now serves only as session provider and context, not as a configuration target. Configuration now managed at Endpoint/Service level.

Changes:
- Remove Configurable conformance from HTTPClient protocol
- Remove configuration property and locking logic from DefaultClient
- Remove makeService and makeTask methods
- Simplify DefaultClient to only hold URLSession
- HTTPClient is now just a lightweight context provider

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Split NetworkTask into NetworkTask (retry orchestration) and DataTask (actual HTTP execution). Improves separation of concerns with retry logic isolated from HTTP communication.

Changes:
- Move original NetworkTask.swift to Task/NetworkTask.swift
- Add DataTask for HTTP request/response handling
- NetworkTask now orchestrates retry using DataTask
- DataTask handles request building, logging, and deserialization
- Add retry error handling with .retry case
- Cleaner separation between retry logic and HTTP execution

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add .retry error case for internal retry signaling between DataTask and NetworkTask. Enables clean separation of retryable errors from terminal errors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add HTTPClient reference to ConfigurationValues for accessing session during request execution. Change all configuration properties from public to internal visibility as configuration is now managed through Configurable protocol methods.

Changes:
- Add client property to ConfigurationValues
- Change all properties from public internal(set) to internal
- Configuration values accessed internally, modified via Configurable
- Enables DataTask to access session via configuration.client.session

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add Identifiable conformance to Endpoint for logging/tracking purposes. Add makeTask helper method for creating NetworkTask instances with configuration.

Changes:
- Endpoint now conforms to Identifiable with id property
- Add makeTask(configuration:) helper method
- Enables endpoint identification in logs
- Simplifies NetworkTask creation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Remove Service protocol as configuration is now managed directly on Endpoints. Services will be generated as namespaces/static methods rather than protocol-conforming types, simplifying the architecture.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Update UserService test implementation to reflect new architecture without Service protocol. Update for simplified HTTPClient and configuration management changes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Enable fluent method chaining by marking all configuration methods
with @discardableResult. This allows users to chain configuration
calls without compiler warnings when the result is not used.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add initial skeleton for new task-based API pattern:
- Introduce _DataTask struct for public task interface
- Add commented HTTPClient.makeTask extension
- Placeholder for async/throws value accessor

This is experimental work toward a SwiftUI-like task API.
Code is incomplete and should not be used yet.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@KhaledChehabeddine KhaledChehabeddine deleted the enhancement-swift-http-generation branch January 18, 2026 19:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant