initial commits
							parent
							
								
									77347f1c1e
								
							
						
					
					
						commit
						63ba97e7ff
					
				|  | @ -0,0 +1,100 @@ | |||
| package strfs | ||||
| 
 | ||||
| import ( | ||||
| 	"io/fs" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| // RegularFile lets you turn a string into a fs.File.
 | ||||
| //
 | ||||
| // Example usage:
 | ||||
| //
 | ||||
| //	var content strfs.Content = strfs.CreateContent("<!DOCTYPE html>"+"\n"+"<html><body>Hello world!</body></html>")
 | ||||
| //	
 | ||||
| //	var regularfile strfs.RegularFile = strfs.RegularFile{
 | ||||
| //		FileContent: content,
 | ||||
| //		FileName:    "helloworld.html",
 | ||||
| //		FileModTIme: time.Date(2022, 12, 12, 10, 30, 14, 2, time.UTC),
 | ||||
| //	}
 | ||||
| type RegularFile struct { | ||||
| 	FileContent Content | ||||
| 	FileName string | ||||
| 	FileModTime time.Time | ||||
| } | ||||
| 
 | ||||
| // A trick to make sure strfs.RegularFile fits the fs.File interface.
 | ||||
| // This is a compile-time check.
 | ||||
| var _ fs.File = &RegularFile{} | ||||
| 
 | ||||
| // Close will stop the Read method from working.
 | ||||
| //
 | ||||
| // Close can safely be called more than once.
 | ||||
| //
 | ||||
| // Close helps strfs.RegularFile fit the fs.File interface.
 | ||||
| // Close makes strfs.RegularFile fit the io.Closer interface.
 | ||||
| func (receiver *RegularFile) Close() error { | ||||
| 	if nil == receiver { | ||||
| 		return errNilReceiver | ||||
| 	} | ||||
| 
 | ||||
| 	return receiver.FileContent.Close() | ||||
| } | ||||
| 
 | ||||
| // Read reads up to len(p) bytes into 'p'.
 | ||||
| // Read returns the number of bytes actually read, and any errors it encountered.
 | ||||
| //
 | ||||
| // Read helps strfs.RegularFile fit the fs.File interface.
 | ||||
| // Read makes strfs.Content fit the io.Reader interface.
 | ||||
| //
 | ||||
| // Example usage:
 | ||||
| //
 | ||||
| //	var content strfs.Content = strfs.CreateContent("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 | ||||
| //	
 | ||||
| //	var regularfile strfs.RegularFile = strfs.RegularFile{
 | ||||
| //		FileContent: content,
 | ||||
| //		FileName: "alphabet.txt",
 | ||||
| //		FileModTime: time.Now(),
 | ||||
| //	}
 | ||||
| //	
 | ||||
| //	var b1 [5]byte
 | ||||
| //	var p1 []byte = b1[:]
 | ||||
| //	
 | ||||
| //	n, err := regularfile.Read(p1)
 | ||||
| //	
 | ||||
| //	// n == 5
 | ||||
| //	// b1 == [5]byte{'A', 'B', 'C', 'D', 'E'}
 | ||||
| //	
 | ||||
| //	// ...
 | ||||
| //	
 | ||||
| //	var b2 [4]byte
 | ||||
| //	var p2 []byte = b2[:]
 | ||||
| //	
 | ||||
| //	n, err := regularfile.Read(p2)
 | ||||
| //	
 | ||||
| //	// n == 4
 | ||||
| //	// b2 == [5]byte{'F', 'G', 'H', 'I'}
 | ||||
| func (receiver *RegularFile) Read(p []byte) (int, error) { | ||||
| 	if nil == receiver { | ||||
| 		return 0, errNilReceiver | ||||
| 	} | ||||
| 
 | ||||
| 	return receiver.FileContent.Read(p) | ||||
| } | ||||
| 
 | ||||
| // Stat returns a fs.FileInfo for a *strfs.RegularFile.
 | ||||
| //
 | ||||
| // Stat helps strfs.RegularFile fit the fs.File interface.
 | ||||
| func (receiver *RegularFile) Stat() (fs.FileInfo, error) { | ||||
| 	if nil == receiver { | ||||
| 		return nil, errNilReceiver | ||||
| 	} | ||||
| 
 | ||||
| 	const modeRegularFile = 0 | ||||
| 
 | ||||
| 	return internalFileInfo{ | ||||
| 		name:    receiver.FileName, | ||||
| 		size:    receiver.FileContent.Size(), | ||||
| 		mode:    modeRegularFile, | ||||
| 		modtime: receiver.FileModTime, | ||||
| 	}, nil | ||||
| } | ||||
		Loading…
	
		Reference in New Issue