Skip to content

refactor: move memory exporter to v1 package#75

Merged
fank merged 2 commits intomainfrom
refactor/export-v1-package
Feb 3, 2026
Merged

refactor: move memory exporter to v1 package#75
fank merged 2 commits intomainfrom
refactor/export-v1-package

Conversation

@fank
Copy link
Member

@fank fank commented Feb 3, 2026

Summary

  • Move export types and builder logic into a dedicated v1 package at internal/storage/memory/export/v1/
  • Prepare the codebase for creating a v2 export format

Changes

  • Create v1/types.go with Export, Time, Entity types
  • Create v1/builder.go with Build() function and helper utilities (parseMarkerSize, sideToIndex, boolToInt)
  • Simplify export.go to use v1 package for building exports
  • Add BuildExport() public method on Backend for thread-safe access
  • Update tests to use v1.Export type

New Structure

internal/storage/memory/
├── export.go           (file I/O, uses v1.Export)
├── export_test.go      (updated to use v1.Export)
├── memory.go           (storage backend + BuildExport method)
└── export/
    └── v1/
        ├── types.go    (Export, Time, Entity types)
        └── builder.go  (Build function + helpers)

Test plan

  • All existing tests pass
  • Full test suite passes

fank added 2 commits February 3, 2026 21:35
Move the export types and builder logic into a dedicated v1 package
to prepare for creating a v2 export format.

Changes:
- Create internal/storage/memory/export/v1/ package
- Move Export, Time, Entity types to v1/types.go
- Move Build() function and helpers to v1/builder.go
- Simplify export.go to use v1 package for building exports
- Add BuildExport() public method for thread-safe access
- Update tests to use v1.Export type
Add tests covering all functions in the v1 package:
- boolToInt: true/false conversion
- sideToIndex: all side string mappings (EAST, WEST, GUER, CIV, etc.)
- parseMarkerSize: valid/invalid JSON parsing
- Build: comprehensive coverage including:
  - Empty missions
  - Mission metadata
  - Time states
  - Soldiers with states and fired events
  - Soldiers in vehicles
  - Vehicles with crew (valid/empty/invalid JSON)
  - Dead vehicles
  - General events with JSON message parsing
  - Hit events (soldier and vehicle IDs)
  - Kill events (soldier and vehicle IDs)
  - Markers (regular and polyline shapes)
  - Color handling (hex prefix stripping)
  - Sparse entity array indexing
  - EndFrame calculation from multiple sources

Coverage: 100%
@github-actions
Copy link

github-actions bot commented Feb 3, 2026

Merging this branch will increase overall coverage

Impacted Packages Coverage Δ 🤖
github.com/OCAP2/extension/v5/internal/storage/memory 15.10% (+0.09%) 👍
github.com/OCAP2/extension/v5/internal/storage/memory/export/v1 20.96% (+20.96%) 🌟

Coverage by file

Changed files (no unit tests)

Changed File Coverage Δ Total Covered Missed 🤖
github.com/OCAP2/extension/v5/internal/storage/memory/export.go 12.84% (-0.61%) 366 (-1247) 47 (-170) 319 (-1077) 👎
github.com/OCAP2/extension/v5/internal/storage/memory/export/v1/builder.go 20.96% (+20.96%) 1274 (+1274) 267 (+267) 1007 (+1007) 🌟
github.com/OCAP2/extension/v5/internal/storage/memory/export/v1/types.go 0.00% (ø) 0 0 0
github.com/OCAP2/extension/v5/internal/storage/memory/memory.go 15.60% (-1.21%) 1660 (+250) 259 (+22) 1401 (+228) 👎

Please note that the "Total", "Covered", and "Missed" counts above refer to code statements instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code.

Changed unit test files

  • github.com/OCAP2/extension/v5/internal/storage/memory/export/v1/builder_test.go
  • github.com/OCAP2/extension/v5/internal/storage/memory/export_test.go

@fank fank merged commit 4b59ed3 into main Feb 3, 2026
3 checks passed
@fank fank deleted the refactor/export-v1-package branch February 3, 2026 20: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