// Copyright 2019 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 (
	"github.com/golang/protobuf/proto"
	fintpb "go.fuchsia.dev/fuchsia/tools/integration/fint/proto"
)

func parseStatic(text string) (*fintpb.Static, error) {
	message := &fintpb.Static{}
	if err := proto.UnmarshalText(text, message); err != nil {
		return nil, err
	}
	return message, nil
}

func parseContext(text string) (*fintpb.Context, error) {
	message := &fintpb.Context{}
	if err := proto.UnmarshalText(text, message); err != nil {
		return nil, err
	}
	return message, nil
}
