/// SOA interface methods definition to circumvent FPC missing RTTI
// - generated at 2016-07-27 09:30:40
unit mORMotRESTFPCInterfaces;

{
  WARNING:
    This unit has been generated by a mORMot 1.18.2797 server.
    Any manual modification of this file may be lost after regeneration.

  Synopse mORMot framework. Copyright (c) Arnaud Bouchez
    Synopse Informatique - https://synopse.info

  This unit is released under a MPL/GPL/LGPL tri-license,
  and therefore may be freely included in any application.

  This unit is intended to work on older FPC compilers, which lack of RTTI
  for interfaces - see http://bugs.freepascal.org/view.php?id=26774
  
  USAGE:

  Add this mORMotRESTFPCInterfaces unit to your uses clause, so that the following
  interfaces would be defined as expected by mORMot under FPC:

   - IRestMethods
  
}

interface

{$I Synopse.inc} // needed for setting HASINTERFACERTTI and proper FPC modes

uses
  SysUtils,
  Classes,
  SynCommons,
  SynLog,
  mORMot,
  RestMethodsInterfaceUnit;


implementation

{$ifndef HASINTERFACERTTI} // circumvent old FPC bug of missing RTTI

{ TInterfaceFactoryDefinition }

type
  /// define and manage missing interface RTTI for the following interfaces:
  // - IRestMethods
  TInterfaceFactoryDefinition = class(TInterfaceFactoryGenerated)
  protected
    procedure AddMethodsFromTypeInfo(aInterface: PTypeInfo); override;
  end;

procedure TInterfaceFactoryDefinition.AddMethodsFromTypeInfo(aInterface: PTypeInfo);
begin
  if aInterface=TypeInfo(IRestMethods) then begin
    AddMethod('HelloWorld',[
      ord(smdresult),'Result',TypeInfo(AnsiString)]);      
    AddMethod('Sum',[
      ord(smdconst),'val1',TypeInfo(Double),
      ord(smdconst),'val2',TypeInfo(Double),
      ord(smdresult),'Result',TypeInfo(Double)]);      
    AddMethod('GetCustomRecord',[
      ord(smdresult),'Result',TypeInfo(rCustomRecord)]);      
    AddMethod('SendCustomRecord',[
      ord(smdconst),'CustomResult',TypeInfo(rCustomRecord),
      ord(smdresult),'Result',TypeInfo(Boolean)]);      
    AddMethod('SendMultipleCustomRecords',[
      ord(smdconst),'CustomResult',TypeInfo(rCustomRecord),
      ord(smdconst),'CustomComplicatedRecord',TypeInfo(rCustomComplicatedRecord),
      ord(smdresult),'Result',TypeInfo(Boolean)]);      
    AddMethod('GetMethodCustomResult',[
      ord(smdresult),'Result',TypeInfo(TServiceCustomAnswer)]);      
    exit;
  end;
end;

initialization
  TInterfaceFactoryDefinition.RegisterInterface(TypeInfo(IRestMethods));

{$endif HASINTERFACERTTI}
end.
