commits
Move all Eio.Flow-related functions from fastcgi_request to the
higher-level fastcgi module. This creates a cleaner separation where
fastcgi_request handles only protocol parsing/serialization using
Buf_read/Buf_write, while fastcgi provides the Flow-based interface
for connection and request handling.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace (`Msg error) result types with raw strings for cleaner APIs
- Add error handling helpers in fastcgi_record (invalid_version, unknown_record_type, check_bounds)
- Simplify complex nested pattern matching in read_request_from_flow using monadic binding
- Extract helper functions for role-based stream reading and DATA stream handling
- Add comprehensive fastcgi_request module with request state management
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add optional max_content_len parameter to Record.pp (default 100 bytes) to handle large records gracefully. Enhance test output with hex dumps of raw file contents and detailed structured pretty printing of parsed records and key-value pairs.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace blocking stdlib file operations with Eio's capability-based filesystem access and streaming I/O. Tests now use Eio_main.run, Eio.Path.with_open_in, and Eio.Buf_read.of_flow for more idiomatic Eio patterns that eliminate intermediate string buffers.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Generated 24 binary test files covering all FastCGI record types
- Includes management records (GET_VALUES, UNKNOWN_TYPE)
- Covers all application record types for Responder/Authorizer/Filter roles
- Tests stream patterns, multiplexing, padding, and edge cases
- Added Python generators and validators for test case creation
- Comprehensive documentation of test scenarios and protocol flows
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create examples/ directory with four sample applications
- hello_responder.ml: Simple "Hello World" FastCGI Responder
- echo_responder.ml: Echo server displaying request information
- simple_authorizer.ml: Path-based authorization server
- basic_filter.ml: Text filter converting input to uppercase
- Update interface types to be compatible with Eio's actual types
- Fix TCP address type from Sockaddr to string for simplicity
- All examples type-check successfully against interfaces
- Expected linking errors confirm readiness for implementation phase
This completes STEP 2: sample binaries successfully demonstrate the API design
and prove the interfaces are usable for real applications.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Move all Eio.Flow-related functions from fastcgi_request to the
higher-level fastcgi module. This creates a cleaner separation where
fastcgi_request handles only protocol parsing/serialization using
Buf_read/Buf_write, while fastcgi provides the Flow-based interface
for connection and request handling.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace (`Msg error) result types with raw strings for cleaner APIs
- Add error handling helpers in fastcgi_record (invalid_version, unknown_record_type, check_bounds)
- Simplify complex nested pattern matching in read_request_from_flow using monadic binding
- Extract helper functions for role-based stream reading and DATA stream handling
- Add comprehensive fastcgi_request module with request state management
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add optional max_content_len parameter to Record.pp (default 100 bytes) to handle large records gracefully. Enhance test output with hex dumps of raw file contents and detailed structured pretty printing of parsed records and key-value pairs.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace blocking stdlib file operations with Eio's capability-based filesystem access and streaming I/O. Tests now use Eio_main.run, Eio.Path.with_open_in, and Eio.Buf_read.of_flow for more idiomatic Eio patterns that eliminate intermediate string buffers.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Generated 24 binary test files covering all FastCGI record types
- Includes management records (GET_VALUES, UNKNOWN_TYPE)
- Covers all application record types for Responder/Authorizer/Filter roles
- Tests stream patterns, multiplexing, padding, and edge cases
- Added Python generators and validators for test case creation
- Comprehensive documentation of test scenarios and protocol flows
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create examples/ directory with four sample applications
- hello_responder.ml: Simple "Hello World" FastCGI Responder
- echo_responder.ml: Echo server displaying request information
- simple_authorizer.ml: Path-based authorization server
- basic_filter.ml: Text filter converting input to uppercase
- Update interface types to be compatible with Eio's actual types
- Fix TCP address type from Sockaddr to string for simplicity
- All examples type-check successfully against interfaces
- Expected linking errors confirm readiness for implementation phase
This completes STEP 2: sample binaries successfully demonstrate the API design
and prove the interfaces are usable for real applications.
馃 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>