Transformation<DateTime.TimeZone.Offset, number, never, never>Decodes a numeric time-zone offset in milliseconds into a
DateTime.TimeZone.Offset and encodes it back to the offset number.
When to use
Use when you need a schema transformation to represent fixed-offset time zones with numeric millisecond offsets.
Details
Decode uses DateTime.zoneMakeOffset; encode returns the offset's offset
field.
export const const timeZoneOffsetFromNumber: Transformation<
DateTime.TimeZone.Offset,
number
>
const timeZoneOffsetFromNumber: {
_tag: 'Transformation';
decode: SchemaGetter.Getter<T, E, RD>;
encode: SchemaGetter.Getter<E, T, RE>;
flip: () => Transformation<number, DateTime.TimeZone.Offset, never, never>;
compose: (other: Transformation<T2, DateTime.TimeZone.Offset, RD2, RE2>) => Transformation<T2, number, RD2, RE2>;
}
Decodes a numeric time-zone offset in milliseconds into a
DateTime.TimeZone.Offset and encodes it back to the offset number.
When to use
Use when you need a schema transformation to represent fixed-offset time
zones with numeric millisecond offsets.
Details
Decode uses DateTime.zoneMakeOffset; encode returns the offset's offset
field.
timeZoneOffsetFromNumber: class Transformation<in out T, in out E, RD = never, RE = never>class Transformation {
_tag: 'Transformation';
decode: SchemaGetter.Getter<T, E, RD>;
encode: SchemaGetter.Getter<E, T, RE>;
flip: () => Transformation<E, T, RE, RD>;
compose: <T2, RD2, RE2>(other: Transformation<T2, T, RD2, RE2>) => Transformation<T2, E, RD | RD2, RE | RE2>;
}
Represents a bidirectional transformation between a decoded type T and an encoded
type E, built from a pair of Getters.
When to use
Use when you need a schema transformation that defines how a schema converts
between two representations.
- You want to compose multiple transformations into a pipeline.
- You want to flip a transformation to swap decode/encode.
Details
This is the primary building block for Schema.decodeTo, Schema.encodeTo,
Schema.decode, Schema.encode, and Schema.link. Each direction is a
SchemaGetter.Getter that handles optionality, failure, and Effect services.
- Immutable —
flip() and compose() return new instances.
flip() swaps the decode and encode getters.
compose(other) chains: this.decode then other.decode for decoding,
other.encode then this.encode for encoding.
Example (Composing two transformations)
import { SchemaTransformation } from "effect"
const trimAndLower = SchemaTransformation.trim().compose(
SchemaTransformation.toLowerCase()
)
// decode: trim then lowercase
// encode: passthrough (both directions)
Transformation<import DateTimeDateTime.declareTimeZone.type DateTime.TimeZone.Offset = /*unresolved*/ anyOffset, number> = function transform<T, E>(options: {
readonly decode: (input: E) => T
readonly encode: (input: T) => E
}): Transformation<T, E>
Creates a Transformation from pure (sync, infallible) decode and encode
functions.
When to use
Use when you need an infallible schema transformation that does not require
Effect services.
Details
- Each function receives the input and returns the output directly.
- Skips
None inputs (missing keys) — functions are only called on present values.
- Does not allocate Effects internally; uses optimized sync path.
Example (Converting between cents and dollars)
import { Schema, SchemaTransformation } from "effect"
const CentsFromDollars = Schema.Number.pipe(
Schema.decodeTo(
Schema.Number,
SchemaTransformation.transform({
decode: (dollars) => dollars * 100,
encode: (cents) => cents / 100
})
)
)
transform<
import DateTimeDateTime.declareTimeZone.type DateTime.TimeZone.Offset = /*unresolved*/ anyOffset,
number
>({
decode: (
input: number
) => DateTime.TimeZone.Offset
decode: (n: numbern) => import DateTimeDateTime.zoneMakeOffset(n: numbern),
encode: (
input: DateTime.TimeZone.Offset
) => number
encode: (tz: DateTime.TimeZone.Offset(parameter) tz: {
_tag: "Offset";
offset: number;
toString: () => string;
toJSON: () => unknown;
}
tz) => tz: DateTime.TimeZone.Offset(parameter) tz: {
_tag: "Offset";
offset: number;
toString: () => string;
toJSON: () => unknown;
}
tz.offset
})