Create Your Own Event Queue 68 In this example, we'll divide the project into a few modules, and we'll split the code up into the following files: src |--ffi. rs |--main. rs |--poll. rs Their descriptions are as follows: ffi. rs : This module will contain the code related to the syscalls we need to communicate with the host operating system main. rs : This is the example program itself poll. rs : This module contains the main abstraction, which is a thin layer over epoll Next, create the four files, mentioned in the preceding list, in the src folder. In main. rs, we need to declare the modules as well: a-epoll/src/main. rs mod ffi; mod poll; Now that we have our project set up, we can start by going through how we'll design the API we'll use. The main abstraction is in poll. rs, so go ahead and open that file. Let's start by stubbing out the structures and functions we need. It's easier to discuss them when we have them in front of us: a-epoll/src/poll. rs use std::{io::{self, Result}, net::Tcp Stream, os::fd::As Raw Fd}; use crate::ffi; type Events = Vec<ffi::Event>; pub struct Poll { registry: Registry, } impl Poll { pub fn new()-> Result<Self> { todo!()