Skip to content

Commit 8447c64

Browse files
dfa1claude
andcommitted
refactor(reader): ExtensionDecoder to extension pkg
Move the ExtensionDecoder interface from the reader root into reader.extension next to its four implementations, mirroring EncodingDecoder in reader.decode. Also sync stale docs: ReadRegistry no longer manages extension decoders (no register(ExtensionDecoder), no ServiceLoader discovery) — the spec set is closed and dispatched in Chunk.as(). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 52dabd0 commit 8447c64

7 files changed

Lines changed: 12 additions & 16 deletions

File tree

CLAUDE.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ core — everything lives under `io.github.dfa1.vortex.core.*`:
2828
core.error VortexException
2929
core.compute FastLanes, PrimitiveArrays
3030
core.fbs / core.proto — generated wire codecs + their runtimes
31-
reader — VortexReader, VortexHttpReader, VortexHandle, ReadRegistry, ExtensionDecoder,
32-
Chunk, ArrayStats, ScanOptions, RowFilter; file internals (Footer, Layout, Trailer,
31+
reader — VortexReader, VortexHttpReader, VortexHandle, ReadRegistry, Chunk, ArrayStats,
32+
ScanOptions, RowFilter; file internals (Footer, Layout, Trailer,
3333
PostscriptParser, …)
3434
reader.array — Array + all subtypes (decode outputs)
3535
reader.decode — EncodingDecoder, DecodeContext, ArrayNode + *EncodingDecoder impls
36-
reader.extension — Date/Time/Timestamp/Uuid ExtensionDecoder
36+
reader.extension — ExtensionDecoder + Date/Time/Timestamp/Uuid impls
3737
writer — VortexWriter, WriteRegistry, WriteOptions, ExtensionEncoder
3838
writer.encode — EncodingEncoder, EncodeContext, NullableData + *EncodingEncoder impls,
3939
extension encoders
@@ -135,9 +135,9 @@ Add `EncodingId` enum constant `VORTEX_FOO("vortex.foo")`, then per side:
135135
### Adding an extension type
136136

137137
Add `ExtensionId` constant, then per side:
138-
- **Decode:** `FooExtensionDecoder implements ExtensionDecoder` in `reader.extension`; register via
139-
`ReadRegistry.builder().register(new FooExtensionDecoder())`**no service file**
140-
(`registerServiceLoaded()` does not discover `ExtensionDecoder`).
138+
- **Decode:** singleton `FooExtensionDecoder implements ExtensionDecoder` in `reader.extension` +
139+
a `case VORTEX_FOO` in `Chunk.as()` not registry-managed, **no service file**
140+
(`registerServiceLoaded()` only discovers `EncodingDecoder`).
141141
- **Encode:** `FooExtensionEncoder implements ExtensionEncoder` in `writer` + FQN in
142142
`writer/.../META-INF/services/io.github.dfa1.vortex.writer.ExtensionEncoder`
143143

docs/reference.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,14 +203,14 @@ Immutable after construction. Build via `ReadRegistry.builder()` or the static c
203203
| Method | Notes |
204204
|------------------------------|------------------------------------------------------------------------------------------|
205205
| `register(EncodingDecoder)` | Add a custom encoding decoder; throws if already registered |
206-
| `register(ExtensionDecoder)` | Add a custom extension decoder; throws if already registered |
207-
| `registerServiceLoaded()` | Add every `EncodingDecoder` and `ExtensionDecoder` discovered via `ServiceLoader` |
206+
| `registerServiceLoaded()` | Add every `EncodingDecoder` discovered via `ServiceLoader` |
208207
| `allowUnknown()` | Switch to passthrough mode — unknown nodes (and their children) decode as `UnknownArray` |
209208
| `build()` | Produce the immutable `ReadRegistry` |
210209

211-
Register custom decoders via `ServiceLoader` by adding the fully qualified class name to
212-
`META-INF/services/io.github.dfa1.vortex.reader.decode.EncodingDecoder` or
213-
`META-INF/services/io.github.dfa1.vortex.reader.ExtensionDecoder`.
210+
Register custom encoding decoders via `ServiceLoader` by adding the fully qualified class name to
211+
`META-INF/services/io.github.dfa1.vortex.reader.decode.EncodingDecoder`. Extension decoders
212+
(`io.github.dfa1.vortex.reader.extension.ExtensionDecoder`) are not registry-managed: the built-in
213+
implementations are singletons invoked directly by their `ExtensionId`.
214214

215215
---
216216

reader/src/main/java/io/github/dfa1/vortex/reader/extension/DateExtensionDecoder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import io.github.dfa1.vortex.reader.array.MaskedArray;
99
import io.github.dfa1.vortex.core.model.ExtensionId;
1010

11-
import io.github.dfa1.vortex.reader.ExtensionDecoder;
1211

1312
import java.time.LocalDate;
1413
import java.util.ArrayList;

reader/src/main/java/io/github/dfa1/vortex/reader/ExtensionDecoder.java renamed to reader/src/main/java/io/github/dfa1/vortex/reader/extension/ExtensionDecoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.github.dfa1.vortex.reader;
1+
package io.github.dfa1.vortex.reader.extension;
22

33
import io.github.dfa1.vortex.core.model.DType;
44
import io.github.dfa1.vortex.core.model.ExtensionId;

reader/src/main/java/io/github/dfa1/vortex/reader/extension/TimeExtensionDecoder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import io.github.dfa1.vortex.core.model.ExtensionId;
1010
import io.github.dfa1.vortex.core.model.TimeDtype;
1111

12-
import io.github.dfa1.vortex.reader.ExtensionDecoder;
1312

1413
import java.time.LocalTime;
1514
import java.util.ArrayList;

reader/src/main/java/io/github/dfa1/vortex/reader/extension/TimestampExtensionDecoder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import io.github.dfa1.vortex.core.model.ExtensionId;
1010
import io.github.dfa1.vortex.core.model.TimestampDtype;
1111

12-
import io.github.dfa1.vortex.reader.ExtensionDecoder;
1312

1413
import java.time.Instant;
1514
import java.time.ZoneId;

reader/src/main/java/io/github/dfa1/vortex/reader/extension/UuidExtensionDecoder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import io.github.dfa1.vortex.reader.array.MaskedArray;
1010
import io.github.dfa1.vortex.core.model.ExtensionId;
1111

12-
import io.github.dfa1.vortex.reader.ExtensionDecoder;
1312

1413
import java.util.ArrayList;
1514
import java.util.List;

0 commit comments

Comments
 (0)