// 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.

package main

import (
	"fmt"

	"go.fuchsia.dev/fuchsia/tools/fidl/lib/fidlgen"
)

// wraparoundType is a type that adds more structure to an underlying primitive
// (wrapped) type.  All such types also support strictness.
type wraparoundType struct {
	named
	subtype    fidlgen.PrimitiveSubtype
	strictness fidlgen.Strictness
	parentType fidlgen.DeclType
}

func strictness(strict fidlgen.Strictness) string {
	if strict {
		return "strict"
	} else {
		return "flexible"
	}
}

// String implements Element.
func (b wraparoundType) String() string {
	return fmt.Sprintf("%v %v %v %v",
		strictness(b.strictness),
		b.parentType,
		b.Name(),
		b.subtype)
}
