From aee64a51610835c809ca28095601b8465ef3dd22 Mon Sep 17 00:00:00 2001 From: Cameron Ross Date: Fri, 15 Jun 2018 06:01:43 -0300 Subject: [PATCH] add File overload for Loader.fromFile (#163) add File overload for Loader.fromFile merged-on-behalf-of: BBasile --- source/dyaml/loader.d | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/source/dyaml/loader.d b/source/dyaml/loader.d index d8f1891..4e16fbb 100644 --- a/source/dyaml/loader.d +++ b/source/dyaml/loader.d @@ -10,6 +10,7 @@ module dyaml.loader; import std.exception; import std.file; +import std.stdio : File; import std.string; import dyaml.composer; @@ -55,6 +56,7 @@ struct Loader /** Construct a Loader to load YAML from a file. * * Params: filename = Name of the file to load from. + * file = Already-opened file to load from. * * Throws: YAMLException if the file could not be opened or read. */ @@ -72,6 +74,13 @@ struct Loader .format(filename, e.msg)); } } + /// ditto + static Loader fromFile(File file) @system + { + auto loader = Loader(file.byChunk(4096).join); + loader.name_ = file.name; + return loader; + } /** Construct a Loader to load YAML from a string. * @@ -332,6 +341,19 @@ struct Loader auto rootNode = Loader.fromFile("example.yaml").load(); assert(rootNode == "Hello world!"); } +/// Load single YAML document from an already-opened file: +@system unittest +{ + // Open a temporary file + auto file = File.tmpfile; + // Write valid YAML + file.write("Hello world!"); + // Return to the beginning + file.seek(0); + // Load document + auto rootNode = Loader.fromFile(file).load(); + assert(rootNode == "Hello world!"); +} /// Load all YAML documents from a file: @safe unittest {