← All compilation units

Flyology_JSON.Writing

Description

Initialize freezes one explicit validated profile before destination begin. Begin_Document starts one transaction. The JSON calls then emit exactly one balanced root; Finish_Document is the only commit request. Calls in Ready are ordinal-bearing grammar failures except Begin_Document. Calls rejected only for lifecycle state have no output or ordinal effect. Reset accepts only Completed, Failed, or Aborted.

Name and string fragments are decoded UTF-8 octets and may split inside a UTF-8 sequence. Number fragments preserve and validate exact JSON lexeme octets. Their array bounds are arbitrary. Token, staged-output, and call-ordinal diagnostics are zero-based aggregates across fragments.

An abnormal escape from a hot JSON call exposes Interrupted after the borrowed call has joined. The owner must call Abort_Document or leave the writer scope before any other use, even if asynchronous transfer won at a return edge and State appears coherent. Terminal_Diagnostic is eligible only in Interrupted, Failed, or Aborted. A boundary formal that violates its nonraising contract is re-raised; the caller immediately unwinds the writer scope without querying or reusing it.

Abort_Document

procedure Abort_Document
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Applied_Profile

function Applied_Profile (Self : Writer) return Profiles.Writer_Profile
Parameters
Self
Return value

Begin_Array

procedure Begin_Array
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Begin_Document

procedure Begin_Document
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Begin_Name

procedure Begin_Name
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Begin_Number

procedure Begin_Number
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Begin_Object

procedure Begin_Object
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Begin_String

procedure Begin_String
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Destination_Abort

procedure Destination_Abort
(Target : in out Destination_Type;
Status : out Destinations.Abort_Status)

Abort is synchronous, nonraising, finite, and nonreentrant. It ends the active unpublished transaction and never publishes, even when Status is Abort_Failed. The writer protects abort and exactly-once bookkeeping from task abort.

Parameters
Target
Status

Destination_Begin

procedure Destination_Begin
(Target : in out Destination_Type;
Status : out Destinations.Begin_Status)

Begin is synchronous, nonraising, finite, and nonreentrant. A successful return starts exactly one unpublished transaction. A failed return starts none. The writer protects this ownership boundary from task abort.

Parameters
Target
Status

Destination_Commit

procedure Destination_Commit
(Target : in out Destination_Type;
Status : out Destinations.Commit_Status)

Commit is synchronous, nonraising, finite, and nonreentrant. Success is the only publication point. Failure publishes nothing and leaves the transaction abortable. The writer protects publication and its ownership transition from task abort.

Parameters
Target
Status

Destination_Type

type Destination_Type is limited private;

Destination_Write

procedure Destination_Write
(Target  : in out Destination_Type;
Data    : Ada.Streams.Stream_Element_Array;
Written : out Ada.Streams.Stream_Element_Count;
Status  : out Destinations.Write_Status)

Write is synchronous, finite, nonreentrant, retains no reference to Data, and does not access a writer alias. On normal return, Write_Succeeded accepts all Data; Write_Exhausted accepts the exact longest prefix; Write_Failed accepts none. Written is a count rather than an Ada index.

On abnormal completion, Write may have staged an in-order prefix of Data from zero through Data'Length. That prefix remains unpublished, Data is not retained, and one coherent transaction remains abortable.

Parameters
Target
Data
Written
Status

End_Array

procedure End_Array
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

End_Name

procedure End_Name
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

End_Number

procedure End_Number
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

End_Object

procedure End_Object
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

End_String

procedure End_String
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Finish_Document

procedure Finish_Document
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Has_Applied_Profile

function Has_Applied_Profile (Self : Writer) return Boolean
Parameters
Self
Return value

Initialize

procedure Initialize
  (Self       : in out Writer;
   Profile    : Profiles.Writer_Profile;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Profile
Diagnostic

Put_Boolean

procedure Put_Boolean
  (Self       : in out Writer;
   Value      : Boolean;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Value
Diagnostic

Put_Name_Fragment

procedure Put_Name_Fragment
  (Self       : in out Writer;
   Value      : Ada.Streams.Stream_Element_Array;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Value
Diagnostic

Put_Null

procedure Put_Null
  (Self       : in out Writer;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Diagnostic

Put_Number_Fragment

procedure Put_Number_Fragment
  (Self       : in out Writer;
   Value      : Ada.Streams.Stream_Element_Array;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Value
Diagnostic

Put_String_Fragment

procedure Put_String_Fragment
  (Self       : in out Writer;
   Value      : Ada.Streams.Stream_Element_Array;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Value
Diagnostic

Reset

procedure Reset
  (Self       : in out Writer;
   Profile    : Profiles.Writer_Profile;
   Diagnostic : out Errors.Diagnostic)
Parameters
Self
Profile
Diagnostic

State

function State (Self : Writer) return Writer_State
Parameters
Self
Return value

Terminal_Diagnostic

function Terminal_Diagnostic (Self : Writer) return Errors.Diagnostic
Parameters
Self
Return value

Writer

type Writer
  (Target        : not null access Destination_Type;
   Maximum_Depth : Natural)
is limited private;
Record fields
Target
Maximum_Depth

Writer_State

type Writer_State is
  (Uninitialized,
   Ready,
   Active,
   Interrupted,
   Completed,
   Failed,
   Aborted);
Enumeration literals
Uninitialized
Ready
Active
Interrupted
Completed
Failed
Aborted