The GitHub Actions job "Fory CI" on fory.git/main has failed.
Run started by GitHub user chaokunyang (triggered by chaokunyang).

Head commit for run:
777bde71e1d8013e44659e93f3ae80ffd0b5703e / Shawn Yang <[email protected]>
feat(xlang): support unsigned int for xlang (#3111)

## Why?

This PR adds support for unsigned integers in the cross-language (xlang)
serialization specification. Previously, the xlang protocol only
supported signed integer types, which required workarounds when
serializing unsigned integers across languages like C++, Rust, and Go
that have native unsigned types.

## What does this PR do?

### 1. Add Unsigned Integer Type IDs
Adds new type IDs for unsigned integers to the xlang specification:
- **UINT8** (9): 8-bit unsigned integer
- **UINT16** (10): 16-bit unsigned integer  
- **UINT32** (11): 32-bit unsigned integer
- **VARU32** (12): Variable-length encoded 32-bit unsigned integer
- **UINT64** (13): 64-bit unsigned integer
- **VARU64** (14): Variable-length encoded 64-bit unsigned integer
- **HU64** (15): Hybrid encoded 64-bit unsigned integer

Also adds unsigned array types: UINT8_ARRAY, UINT16_ARRAY, UINT32_ARRAY,
UINT64_ARRAY.

### 2. Rename Type Names for Consistency
Standardizes type names across all languages:
- `VAR_INT32` → `VAR32`
- `VAR_INT64` → `VAR64`
- `SLI_INT64` → `H64` (Hybrid encoding)
- `FLOAT` → `FLOAT32`
- `DOUBLE` → `FLOAT64`
- `HALF_FLOAT` → `FLOAT16`

### 3. Reorganize Type ID Layout
Restructures the type ID space for better logical grouping:
- **0-8**: Signed integers (BOOL, INT8-INT64, VAR32, VAR64, H64)
- **9-15**: Unsigned integers (UINT8-UINT64, VARU32, VARU64, HU64)
- **16-18**: Floating point (FLOAT16, FLOAT32, FLOAT64)
- **19**: STRING
- **20-22**: Collections (LIST, SET, MAP)
- **23-30**: User types (ENUM, STRUCT variants, EXT variants)
- **31-32**: Type combinators (UNION, NONE)
- **33+**: Other types (DURATION, TIMESTAMP, arrays, etc.)

### 4. Update All Language Implementations
Updates type definitions consistently across:
- **C++**: `cpp/fory/type/type.h`
- **Java**:
`java/fory-core/src/main/java/org/apache/fory/type/Types.java`
- **Python**: `python/pyfory/types.py` (refactored from `type_util.py`)
- **Go**: `go/fory/types.go`
- **Rust**: `rust/fory-core/src/types.rs`
- **JavaScript**: `javascript/packages/fory/lib/type.ts`

### 5. Update Specification Documents
- Updates `docs/specification/xlang_serialization_spec.md` with new type
IDs
- Updates `docs/specification/xlang_type_mapping.md` with type mappings

## Related issues

#3110

## Does this PR introduce any user-facing change?

- [x] Does this PR introduce any public API change?
  - New unsigned integer types available for xlang serialization
- Type name changes (with backward compatibility aliases in some
languages)
- [x] Does this PR introduce any binary protocol compatibility change?
- **Breaking change**: Type IDs have been reorganized. Data serialized
with old type IDs will not be compatible with the new format.
- This is expected as the xlang protocol is still evolving before 1.0
release.

## Benchmark

N/A - This is a protocol specification change with no expected
performance impact.

Report URL: https://github.com/apache/fory/actions/runs/20705776422

With regards,
GitHub Actions via GitBox


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to