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