v.embedfile: make path public (#12614)
parent
ddec89f9ee
commit
0f59d88ba6
|
@ -2,10 +2,13 @@ module embed_file
|
|||
|
||||
import os
|
||||
|
||||
pub const (
|
||||
is_used = 1
|
||||
)
|
||||
|
||||
// https://github.com/vlang/rfcs/blob/master/embedding_resources.md
|
||||
// EmbedFileData encapsulates functionality for the `$embed_file()` compile time call.
|
||||
pub struct EmbedFileData {
|
||||
path string
|
||||
apath string
|
||||
mut:
|
||||
compressed &byte
|
||||
|
@ -14,10 +17,11 @@ mut:
|
|||
free_uncompressed bool
|
||||
pub:
|
||||
len int
|
||||
path string
|
||||
}
|
||||
|
||||
pub fn (ed EmbedFileData) str() string {
|
||||
return 'embed_file.EmbedFileData{ len: $ed.len, path: "$ed.path", path: "$ed.apath", uncompressed: ${ptr_str(ed.uncompressed)} }'
|
||||
return 'embed_file.EmbedFileData{ len: $ed.len, path: "$ed.path", apath: "$ed.apath", uncompressed: ${ptr_str(ed.uncompressed)} }'
|
||||
}
|
||||
|
||||
[unsafe]
|
||||
|
|
|
@ -6,6 +6,7 @@ fn test_const_embed_file() {
|
|||
assert file.len == 603
|
||||
fdata := file.data()
|
||||
eprintln('file after .data() call: $file')
|
||||
assert file.path == 'v.png'
|
||||
assert file.len == 603
|
||||
unsafe {
|
||||
assert fdata.vbytes(4) == [byte(0x89), `P`, `N`, `G`]
|
|
@ -0,0 +1,18 @@
|
|||
import v.embed_file
|
||||
|
||||
fn test_embed_file_with_import() {
|
||||
mut file := $embed_file('v.png')
|
||||
eprintln('file: $file')
|
||||
assert file.len == 603
|
||||
fdata := file.data()
|
||||
eprintln('file after .data() call: $file')
|
||||
assert file.len == 603
|
||||
unsafe {
|
||||
assert fdata.vbytes(4) == [byte(0x89), `P`, `N`, `G`]
|
||||
}
|
||||
assert check_file(file)
|
||||
}
|
||||
|
||||
fn check_file(file embed_file.EmbedFileData) bool {
|
||||
return file.len == 603
|
||||
}
|
Before Width: | Height: | Size: 603 B After Width: | Height: | Size: 603 B |
|
@ -98,7 +98,7 @@ fn prepare_bin2v_file(mut fmt_bench benchmark.Benchmark) {
|
|||
}
|
||||
|
||||
fn write_bin2v_keep_content() ? {
|
||||
img0 := os.join_path('vlib', 'v', 'embed_file', 'v.png')
|
||||
img0 := os.join_path('vlib', 'v', 'embed_file', 'tests', 'v.png')
|
||||
img1 := os.join_path('tutorials', 'building_a_simple_web_blog_with_vweb', 'img', 'time.png')
|
||||
os.rm(b2v_keep_path) ?
|
||||
res := os.execute('$vexe bin2v -w $b2v_keep_path $img0 $img1')
|
||||
|
|
|
@ -14,7 +14,12 @@ fn (mut g Gen) embed_file_is_prod_mode() bool {
|
|||
fn (mut g Gen) gen_embed_file_init(node ast.ComptimeCall) {
|
||||
g.writeln('(v__embed_file__EmbedFileData){')
|
||||
g.writeln('\t\t.path = ${ctoslit(node.embed_file.rpath)},')
|
||||
if g.embed_file_is_prod_mode() {
|
||||
// apath is not needed in production and may leak information
|
||||
g.writeln('\t\t.apath = ${ctoslit('')},')
|
||||
} else {
|
||||
g.writeln('\t\t.apath = ${ctoslit(node.embed_file.apath)},')
|
||||
}
|
||||
file_size := os.file_size(node.embed_file.apath)
|
||||
if file_size > 5242880 {
|
||||
eprintln('Warning: embedding of files >= ~5MB is currently not supported')
|
||||
|
|
|
@ -26,6 +26,7 @@ v__embed_file__EmbedFileIndexEntry* v__embed_file__find_index_entry_by_path(void
|
|||
|
||||
v__embed_file__EmbedFileData my_source = (v__embed_file__EmbedFileData){
|
||||
.path = _SLIT("embed.vv"),
|
||||
.apath = _SLIT(""),
|
||||
.compressed = v__embed_file__find_index_entry_by_path((voidptr)_v_embed_file_index, _SLIT("embed.vv"))->data,
|
||||
|
||||
// Initializations for module v.embed_file :
|
||||
|
|
|
@ -125,7 +125,7 @@ fn (mut p Parser) comptime_call() ast.ComptimeCall {
|
|||
epath = abs_path
|
||||
}
|
||||
}
|
||||
p.register_auto_import('v.embed_file')
|
||||
p.register_auto_import('v.preludes.embed_file')
|
||||
return ast.ComptimeCall{
|
||||
scope: 0
|
||||
is_embed: true
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
module embed_file
|
||||
|
||||
// This prelude is loaded in every v program that uses `$embed_file`,
|
||||
// in both the main executable, and in the shared library.
|
||||
import v.embed_file
|
||||
|
||||
const (
|
||||
no_warning_embed_file_is_used = embed_file.is_used
|
||||
)
|
Loading…
Reference in New Issue