Rust - insert into piecetable
Keep in mind that there already exist rope structure implementations in Rust, which support utf8, for example an_rope, where your PieceTable::insert is Rope::insert_str: https://docs.rs/an-rope/0.3.1/an_rope/struct.Rope.html#method.insert_str
Your code is really good for someone who just started learning, and nothing stands out as a misuse of language.
Why is index + 1 passed to piece_at, not simply index?
Using VecDeque does give a little potential for speedup in random insertion and removal. Although if I was doing a program like this, my choice of the data structure would be different - I'd use BTreeSet&lt;Piece&gt; instead, and order the Pieces by piece.offset.
You may write a removal and an insert at the same index as a single [] = instead.
About Copy/Clone:

if your Piece derived Copy, the &amp; in &amp;self.table[index] could be omitted. Did you try compiling this code? Can it compile without errors? I doubt it since  the immutable borrow with &amp; will prevent you from removal and insertion later on.
the .clone() in piece_at can be omitted, because piece: usize is Plain Old Data that is copied around with zero overhead (in syntax and in performance as well).

There are two tiny misspellings

text: &amp;string instead of text: &amp;str
(usize,usize&gt;, instead of (usize,usize)&gt;,

I'd change the Err(-1) return to carry the unit value instead as we don't need the i32 to signal anything. We return Err(()) there.