{{/*
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
*/}}

{{- define "Filename:Markers" -}}
fidl/{{ .LibraryDots }}/cpp/markers.h
{{- end }}


{{- define "File:Markers" -}}
  {{- UseWire -}}
  // WARNING: This file is machine generated by fidlgen.

  #pragma once

  #include <lib/fidl/llcpp/internal/transport.h>

  {{ range .Protocols }}
  {{- if .Transport }}
    {{- $protocol := . }}
    {{ EnsureNamespace . }}
    {{ .Docs }}
    class {{ .Name }} final {
      {{ .Name }}() = delete;
     public:
      using Transport = {{ .Transport.Type }};

      {{- range .Methods }}
        {{- .Docs }}
        class {{ .Marker.Self }} final {
          {{ .Marker.Self }}() = delete;
         public:
          using Protocol = {{ $protocol }};
          static constexpr bool kHasRequest = {{ .HasRequest }};
          static constexpr bool kHasResponse = {{ .HasResponse }};
        };
      {{- end }}
    };
  {{- end }}
  {{- end }}
  {{ EndOfFile }}
{{ end }}


