-module(lightspeed@integration@data). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/lightspeed/integration/data.gleam"). -export([crud_pattern/0, event_stream_pattern/0, local_dev_pattern/0, valid/1, migration_track_label/1, signature/1, adapter/1, name/1]). -export_type([migration_track/0, pattern/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC(" Data integration patterns for ecosystem compatibility (M26).\n"). -type migration_track() :: dual_write_first | read_replica_first | big_bang_cutover. -type pattern() :: {pattern, binary(), lightspeed@data@repository:adapter(), migration_track(), boolean(), integer(), boolean()}. -file("src/lightspeed/integration/data.gleam", 26). ?DOC(" CRUD-oriented mixed-runtime data pattern.\n"). -spec crud_pattern() -> pattern(). crud_pattern() -> {pattern, <<"crud_mixed_runtime"/utf8>>, {mixed_bridge, <<"MyApp.RepoRead"/utf8>>, <<"MyApp.RepoWrite"/utf8>>}, dual_write_first, true, 3, true}. -file("src/lightspeed/integration/data.gleam", 41). ?DOC(" Event-stream oriented data pattern.\n"). -spec event_stream_pattern() -> pattern(). event_stream_pattern() -> {pattern, <<"event_stream_bridge"/utf8>>, {elixir_bridge, <<"MyApp.EventStore"/utf8>>}, read_replica_first, true, 5, true}. -file("src/lightspeed/integration/data.gleam", 53). ?DOC(" In-memory local development fallback pattern.\n"). -spec local_dev_pattern() -> pattern(). local_dev_pattern() -> {pattern, <<"local_dev_in_memory"/utf8>>, gleam_in_memory, big_bang_cutover, true, 1, true}. -file("src/lightspeed/integration/data.gleam", 107). -spec adapter_track_compatible( lightspeed@data@repository:adapter(), migration_track() ) -> boolean(). adapter_track_compatible(Adapter, Track) -> case {Adapter, Track} of {gleam_in_memory, big_bang_cutover} -> true; {gleam_in_memory, _} -> false; {_, _} -> true end. -file("src/lightspeed/integration/data.gleam", 65). ?DOC(" Validate data integration constraints.\n"). -spec valid(pattern()) -> boolean(). valid(Pattern) -> ((erlang:element(5, Pattern) andalso (erlang:element(6, Pattern) > 0)) andalso erlang:element(7, Pattern)) andalso adapter_track_compatible( erlang:element(3, Pattern), erlang:element(4, Pattern) ). -file("src/lightspeed/integration/data.gleam", 73). ?DOC(" Stable migration-track label.\n"). -spec migration_track_label(migration_track()) -> binary(). migration_track_label(Track) -> case Track of dual_write_first -> <<"dual_write_first"/utf8>>; read_replica_first -> <<"read_replica_first"/utf8>>; big_bang_cutover -> <<"big_bang_cutover"/utf8>> end. -file("src/lightspeed/integration/data.gleam", 118). -spec bool_label(boolean()) -> binary(). bool_label(Value) -> case Value of true -> <<"true"/utf8>>; false -> <<"false"/utf8>> end. -file("src/lightspeed/integration/data.gleam", 82). ?DOC(" Stable pattern signature.\n"). -spec signature(pattern()) -> binary(). signature(Pattern) -> <<<<<<<<<<<<<<<<<<<<<<"data:"/utf8, (erlang:element(2, Pattern))/binary>>/binary, "|adapter="/utf8>>/binary, (lightspeed@data@repository:adapter_label( erlang:element(3, Pattern) ))/binary>>/binary, "|track="/utf8>>/binary, (migration_track_label( erlang:element(4, Pattern) ))/binary>>/binary, "|scope_enforced="/utf8>>/binary, (bool_label(erlang:element(5, Pattern)))/binary>>/binary, "|retry_budget="/utf8>>/binary, (erlang:integer_to_binary(erlang:element(6, Pattern)))/binary>>/binary, "|read_after_write_check="/utf8>>/binary, (bool_label(erlang:element(7, Pattern)))/binary>>. -file("src/lightspeed/integration/data.gleam", 98). ?DOC(" Pattern adapter.\n"). -spec adapter(pattern()) -> lightspeed@data@repository:adapter(). adapter(Pattern) -> erlang:element(3, Pattern). -file("src/lightspeed/integration/data.gleam", 103). ?DOC(" Pattern name.\n"). -spec name(pattern()) -> binary(). name(Pattern) -> erlang:element(2, Pattern).