# Copyright 2023 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.
"""Code for interacting with `recipe_wrapper`."""

from recipe_engine import recipe_api


class RecipeWrapperApi(recipe_api.RecipeApi):
    """API for running tests and processing test results."""

    def __init__(self, props, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._deferred_steps_dir = props.deferred_steps_dir

    @property
    def deferred_steps_dir(self):
        return self._deferred_steps_dir
