Leonora Tindall 278043b16a | ||
---|---|---|
src | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
README.md |
README.md
Rust Tokens Coding Challenge
This coding challenge presents a tokenization/parsing scenario in which some external system is accepting bytes in discrete packets representing a stream.
You will solve the challenge by modifying the method process
of the struct Parser
, without changing its function signature or the signature of the constructor, new
. You can, however, modify the struct Parser
itself however you feel is necessary.
Packetization
These packets aren't consistent in their size or contents, so the stream
"I am a stream of packets; synthesize me."
could just as easily be
"I am ", "a stream ", "of packets; ", "synthesize me."
,
one packet per character ("I", " ", "a", "m", ...
), or just one packet
containing the entire input.
Input and Output
Your task is to implement a struct, called Parser
, whose process
method
adds a suffix after certain words. So, for instance, if given the token "foo"
and the suffix "bar"
, your Parser
would take the following input:
"Does this foo look like a fooing bar to you?"
and return this output:
"Does this foobar look like a foobaring bar to you?"
This needs to work over the full range of possible packetizations, from one packet for the whole input to one packet per character.
Mechanics of I/O
The process
function takes a mutable reference to the Parser
(so you can
add some state into the Parser
if you want),
a chunk of bytes to process,
and a &mut dyn Write
sink for the output.
If you're not familiar with the Write
trait, it's worth looking into.
The gist, however, is that you can send a buffer (like a &[u8]
) to the
Write
r with its write_all
method.
This is actually what the default implementation of process
does, as provided by the challenge, which is of course not a correct solution - but it does pass half of the tests!
Non-functional Requirements
There are no constraints on speed, memory usage, or binary size. Go wild.
This Repo
This Git repo has just two commits, on the branches challenge
(and main
) and solution
.
Don't look at solution
until you've solved the challenge!