Skip to content

Commit 50f7f68

Browse files
committed
Basic long form vars works
1 parent b04ea81 commit 50f7f68

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

esi/src/lib.rs

+34
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use fastly::http::request::PendingRequest;
1010
use fastly::http::{header, Method, StatusCode, Url};
1111
use fastly::{mime, Body, Request, Response};
1212
use log::{debug, error, trace};
13+
use quick_xml::events::Event as XmlEvent;
1314
use std::collections::{HashMap, VecDeque};
1415
use std::io::{BufRead, Write};
1516

@@ -469,6 +470,39 @@ fn event_receiver(
469470
// TODO: long form
470471
}
471472
}
473+
Event::VarsContent(event) => {
474+
let mut buf = vec![];
475+
let mut cur = event.iter().peekable();
476+
while let Some(c) = cur.next() {
477+
if *c == b'$' {
478+
if cur.peek() == Some(&&b'(') {
479+
println!("Found a variable!");
480+
cur.next();
481+
482+
let mut varbuf = vec![];
483+
while let Some(vc) = cur.next() {
484+
if *vc == b')' {
485+
break;
486+
}
487+
varbuf.push(*vc)
488+
}
489+
490+
match String::from_utf8(varbuf) {
491+
Ok(name) => {
492+
if let Some(value) = variables.get(&name) {
493+
let value = value.to_owned();
494+
queue.push_back(Element::Raw(value.into_bytes()));
495+
}
496+
}
497+
Err(e) => println!("Failed to parse variable: {}", e),
498+
}
499+
}
500+
} else {
501+
buf.push(*c);
502+
}
503+
}
504+
queue.push_back(Element::Raw(buf));
505+
}
472506
Event::XML(event) => {
473507
debug!("pushing content to buffer, len: {}", queue.len());
474508
let mut buf = vec![];

esi/src/parse.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ pub enum Tag<'a> {
4747
#[allow(clippy::upper_case_acronyms)]
4848
pub enum Event<'e> {
4949
XML(XmlEvent<'e>),
50+
VarsContent(XmlEvent<'e>),
5051
ESI(Tag<'e>),
5152
}
5253

@@ -220,10 +221,15 @@ where
220221
break;
221222
}
222223
Ok(e) => {
224+
let event = if open_vars {
225+
Event::VarsContent(e.into_owned())
226+
} else {
227+
Event::XML(e.into_owned())
228+
};
223229
if *depth == 0 {
224-
callback(Event::XML(e.into_owned()))?;
230+
callback(event)?;
225231
} else {
226-
task.push(Event::XML(e.into_owned()));
232+
task.push(event);
227233
}
228234
}
229235
_ => {}

examples/esi_vars_example/src/index.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ <h1>My Variable Website</h1>
1212
<esi:assign name="test" value="YES" />
1313
Check (short form): YES=<esi:vars name="test" /><br>
1414
Check (long form): YES=<esi:vars>$(test)</esi:vars><br>
15-
15+
1616
Updating variable to "PERHAPS"...<br>
1717
<esi:assign name="test" value="PERHAPS" />
1818
Check (short form): PERHAPS=<esi:vars name="test" /><br>
1919
Check (long form): PERHAPS=<esi:vars>$(test)</esi:vars><br>
20+
2021
</div>
2122
</body>
2223
</html>

0 commit comments

Comments
 (0)