Skip to content

Commit 3c48c3b

Browse files
committed
Changed API to accept Stream
1 parent f294c5c commit 3c48c3b

File tree

3 files changed

+36
-51
lines changed

3 files changed

+36
-51
lines changed

src/Host.cs

Lines changed: 27 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,24 @@ public Module LoadModule(string path)
592592
return LoadModule(Path.GetFileNameWithoutExtension(path), File.ReadAllBytes(path));
593593
}
594594

595+
/// <summary>
596+
/// Loads a <see cref="Module"/> given stream as WebAssembly.
597+
/// </summary>
598+
/// <param name="moduleName">Name of the module</param>
599+
/// <param name="stream">Stream with module data</param>
600+
/// <returns>Returns a new <see cref="Module"/>.</returns>
601+
public Module LoadModule(string moduleName, Stream moduleStream)
602+
{
603+
using (StreamReader reader = new StreamReader(moduleStream))
604+
{
605+
using (MemoryStream ms = new MemoryStream())
606+
{
607+
reader.BaseStream.CopyTo(ms);
608+
return LoadModule(moduleName, ms.ToArray());
609+
}
610+
}
611+
}
612+
595613
/// <summary>
596614
/// Loads a <see cref="Module"/> based on a WebAssembly text format representation.
597615
/// </summary>
@@ -645,53 +663,17 @@ public Module LoadModuleText(string path)
645663
return LoadModuleText(Path.GetFileNameWithoutExtension(path), File.ReadAllText(path));
646664
}
647665

648-
public Module LoadEmbeddedModule(string resourceName)
649-
{
650-
var assembly = Assembly.GetCallingAssembly();
651-
var allResources = new List<string>(
652-
assembly.GetManifestResourceNames().Where(str => str.EndsWith(resourceName))
653-
);
654-
if (allResources.Count == 0)
655-
{
656-
throw new ArgumentException($"Could not find resource: {resourceName} !!");
657-
}
658-
if (allResources.Count > 1)
659-
{
660-
throw new ArgumentException(@$"Found more than one resource with name {resourceName}: {allResources} !! Consider specify full path to resource ...");
661-
}
662-
var assemblyResourceName = allResources.First();
663-
using (Stream stream = assembly.GetManifestResourceStream(assemblyResourceName))
664-
using (StreamReader reader = new StreamReader(stream))
665-
{
666-
using (MemoryStream ms = new MemoryStream())
667-
{
668-
reader.BaseStream.CopyTo(ms);
669-
byte[] bytes = ms.ToArray();
670-
return LoadModule(Path.GetFileNameWithoutExtension(assemblyResourceName), bytes);
671-
}
672-
}
673-
}
674-
675-
public Module LoadEmbeddedModuleText(string resourceName)
666+
/// <summary>
667+
/// Loads a <see cref="Module"/> given stream as WebAssembly text format stream.
668+
/// </summary>
669+
/// <param name="moduleName">Name of the module</param>
670+
/// <param name="stream">WebAssembly text format stream with module data</param>
671+
/// <returns>Returns a new <see cref="Module"/>.</returns>
672+
public Module LoadModuleText(string moduleName, Stream moduleStream)
676673
{
677-
var assembly = Assembly.GetCallingAssembly();
678-
var allResources = new List<string>(
679-
assembly.GetManifestResourceNames().Where(str => str.EndsWith(resourceName))
680-
);
681-
if (allResources.Count == 0)
682-
{
683-
throw new ArgumentException($"Could not find resource: {resourceName} !!");
684-
}
685-
if (allResources.Count > 1)
686-
{
687-
throw new ArgumentException(@$"Found more than one resource with name {resourceName}: {allResources} !! Consider specify full path to resource ...");
688-
}
689-
var assemblyResourceName = allResources.First();
690-
using (Stream stream = assembly.GetManifestResourceStream(assemblyResourceName))
691-
using (StreamReader reader = new StreamReader(stream))
674+
using (StreamReader reader = new StreamReader(moduleStream))
692675
{
693-
string text = reader.ReadToEnd();
694-
return LoadModuleText(Path.GetFileNameWithoutExtension(assemblyResourceName), text);
676+
return LoadModuleText(moduleName, reader.ReadToEnd());
695677
}
696678
}
697679

tests/Fixtures/ModuleFixture.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ public ModuleFixture()
1515

1616
var modulePath = Path.Combine("Modules", ModuleFileName);
1717
Module = Host.LoadModuleText(modulePath);
18-
EmbeddedModule = Host.LoadEmbeddedModuleText(modulePath);
18+
using (FileStream fs = File.OpenRead(modulePath))
19+
{
20+
StreamModule = Host.LoadModuleText(modulePath, fs);
21+
}
1922
}
2023

2124
public void Dispose()
@@ -26,10 +29,10 @@ public void Dispose()
2629
Module = null;
2730
}
2831

29-
if (!(EmbeddedModule is null))
32+
if (!(StreamModule is null))
3033
{
31-
EmbeddedModule.Dispose();
32-
EmbeddedModule = null;
34+
StreamModule.Dispose();
35+
StreamModule = null;
3336
}
3437

3538
if (!(Host is null))
@@ -41,7 +44,7 @@ public void Dispose()
4144

4245
public Host Host { get; set; }
4346
public Module Module { get; set; }
44-
public Module EmbeddedModule { get; set; }
47+
public Module StreamModule { get; set; }
4548

4649
protected abstract string ModuleFileName { get; }
4750
}

tests/Wasmtime.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
<ItemGroup>
2121
<None Update="Modules/*.wat" CopyToOutputDirectory="PreserveNewest" />
22-
<EmbeddedResource Update="Modules/*.wat" />
22+
<!-- <EmbeddedResource Update="Modules/*.wat" />-->
2323
</ItemGroup>
2424

2525
</Project>

0 commit comments

Comments
 (0)