------------------------------------------------------------------------------ -- Language Server Protocol -- -- -- -- Copyright (C) 2020-2023, AdaCore -- -- -- -- This is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- -- ware Foundation; either version 3, or (at your option) any later ver- -- -- sion. This software is distributed in the hope that it will be useful, -- -- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- -- -- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -- -- License for more details. You should have received a copy of the GNU -- -- General Public License distributed with this software; see file -- -- COPYING3. If not, go to http://www.gnu.org/licenses for a complete copy -- -- of the license. -- ------------------------------------------------------------------------------ private with Ada.Containers.Vectors; private with VSS.JSON.Streams; package VSS.JSON.Pull_Readers.Look_Ahead is type JSON_Look_Ahead_Reader (Parent : not null access JSON_Pull_Reader'Class) is limited new JSON_Pull_Reader with private; -- This type provides a limited capability to look ahead into some JSON -- stream by remembering observed events. After end of look ahead phase -- the user "rewind" the stream and is able to read all events againg. procedure Rewind (Self : in out JSON_Look_Ahead_Reader'Class); -- Restore JSON stream position to the very beginning, so it can be read -- again. overriding function Key_Name (Self : JSON_Look_Ahead_Reader) return VSS.Strings.Virtual_String; private package JSON_Stream_Element_Vectors is new Ada.Containers.Vectors (Index_Type => Positive, Element_Type => VSS.JSON.Streams.JSON_Stream_Element, "=" => VSS.JSON.Streams."="); type JSON_Look_Ahead_Reader (Parent : not null access JSON_Pull_Reader'Class) is limited new JSON_Pull_Reader with record Data : JSON_Stream_Element_Vectors.Vector; Index : Natural := 1; Save_Mode : Boolean := True; end record; overriding function At_End (Self : JSON_Look_Ahead_Reader) return Boolean; overriding function Read_Next (Self : in out JSON_Look_Ahead_Reader) return VSS.JSON.Streams.JSON_Stream_Element_Kind; overriding procedure Clear (Self : in out JSON_Look_Ahead_Reader); overriding function Error (Self : JSON_Look_Ahead_Reader) return JSON_Reader_Error; overriding function Error_Message (Self : JSON_Look_Ahead_Reader) return VSS.Strings.Virtual_String; overriding procedure Raise_Error (Self : in out JSON_Look_Ahead_Reader; Message : VSS.Strings.Virtual_String); overriding function Element_Kind (Self : JSON_Look_Ahead_Reader) return VSS.JSON.Streams.JSON_Stream_Element_Kind; overriding function String_Value (Self : JSON_Look_Ahead_Reader) return VSS.Strings.Virtual_String; overriding function Number_Value (Self : JSON_Look_Ahead_Reader) return VSS.JSON.JSON_Number; overriding function Boolean_Value (Self : JSON_Look_Ahead_Reader) return Boolean; overriding procedure Skip_Current_Array (Self : in out JSON_Look_Ahead_Reader); overriding procedure Skip_Current_Object (Self : in out JSON_Look_Ahead_Reader); overriding procedure Skip_Current_Value (Self : in out JSON_Look_Ahead_Reader); end VSS.JSON.Pull_Readers.Look_Ahead;