| // Copyright 2022 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. | 
 | library fuchsia.driver.playground; | 
 |  | 
 | using fuchsia.url; | 
 | using zx; | 
 |  | 
 | // These lengths were chosen arbitrarily and can be adjusted later if needed. | 
 | const MAX_ARGV_ITEM_LENGTH uint64 = 4096; | 
 | const MAX_ARGV_VECTOR_LENGTH uint64 = 256; | 
 |  | 
 | type StdioParams = resource table { | 
 |     1: standard_in zx.Handle:SOCKET; | 
 |     2: standard_out zx.Handle:SOCKET; | 
 |     3: standard_err zx.Handle:SOCKET; | 
 | }; | 
 |  | 
 | /// Protocol for receiving an event when a tool terminates. | 
 | closed protocol CloseController { | 
 |     /// This event fires when the tool has terminated. | 
 |     strict -> OnTerminated(struct { | 
 |         /// The process exit code of the tool. | 
 |         return_code int32; | 
 |     }); | 
 | }; | 
 |  | 
 | /// Protocol for running driver tools in the playground. | 
 | @discoverable | 
 | closed protocol ToolRunner { | 
 |     /// Run a tool. | 
 |     strict RunTool(resource struct { | 
 |         /// The path to the tool executable, eg: 'fuchsia-pkg://fuchsia.com/package#bin/tool'. | 
 |         tool string:fuchsia.url.MAX_URL_LENGTH; | 
 |         /// The argv to pass into the tool executable. | 
 |         args vector<string:MAX_ARGV_ITEM_LENGTH>:<MAX_ARGV_VECTOR_LENGTH, optional>; | 
 |         /// The stdio socket handles to give to the tool. | 
 |         stdio_params StdioParams; | 
 |         /// Used by the playground to signal that the started tool has terminated. | 
 |         close_controller server_end:CloseController; | 
 |     }) -> () error zx.Status; | 
 | }; |